home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 25 / Cream of the Crop 25.iso / os2 / rxbas221.zip / rexxbase.INF (.txt) < prev    next >
OS/2 Help File  |  1997-04-17  |  92KB  |  4,134 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. RexxBase The dBase Database For Rexx ΓòÉΓòÉΓòÉ
  3.  
  4. RexxBase and "The dBase Database for Rexx" are trademarks of American Coders, 
  5. LTD. 
  6.  
  7. OS/2 is a registered trademark of the International Business Machines 
  8. Corporation. 
  9.  
  10. dBase, dBase III and dBase IV are trademarks of Borland Corporation. 
  11.  
  12. Other trademarks are the trademarks of their respective trademark owners. 
  13.  
  14. Contacts: 
  15.  
  16. American Coders, LTD. 
  17.  
  18. Post Office Box 97462 
  19.  
  20. Raleigh, NC 27624 
  21.  
  22. (919) 846-2014 
  23.  
  24. CompuServe ID:  74150,2370 
  25.  
  26. Internet(USENET) ID: joe@usacoder.rtp.nc.us 
  27.  
  28.  
  29. Spring 1997 Edition.  Version 2.21. 
  30.  
  31. Copyright 1993-97 American Coders LTD Raleigh NC USA 
  32.  
  33.  
  34. ΓòÉΓòÉΓòÉ 1.1. Rights and Limitations ΓòÉΓòÉΓòÉ
  35.  
  36. American Coders, LTD makes no warranties as to the information in this guide. 
  37. Additionally, American Coders Ltd is not responsible or liable for any loss or 
  38. damage of any kind resulting from use of this product. 
  39.  
  40. The Software is protected by the Copyright laws of the United States of 
  41. America, as well as by the Copyright laws of many other countries pursuant to 
  42. international treaties.  All rights reserved.  No part of the RexxBase computer 
  43. program, documentation or related files may be reproduced photocopied, stored 
  44. on a retrieval system, or transmitted except as provided by U. S. Copyright 
  45. law. 
  46.  
  47.  
  48. ΓòÉΓòÉΓòÉ 1.2. System Overview. ΓòÉΓòÉΓòÉ
  49.  
  50. RexxBase is a REXX external function DLL to be used by your command files to 
  51. access dBase files. RexxBase offers database access functions to Rexx command 
  52. procedures.  By using the RexxBase functions, Rexx programs gain access to tens 
  53. of thousands of database files written, primarily, for the PC/MS Dos 
  54. environment. 
  55.  
  56. RexxBase generates dBase field names and values that are available directly to 
  57. a Rexx program.  The Rexx program can change this data and update dBase files 
  58. directly.  Also database file control information is available to the Rexx 
  59. program.  This information includes such data as last date the database was 
  60. updated, number of records on file, field names, etc. 
  61.  
  62.  
  63. ΓòÉΓòÉΓòÉ 1.3. Version and Requirements. ΓòÉΓòÉΓòÉ
  64.  
  65. Version 2.21. 
  66.  
  67. RexxBase runs under 
  68.  
  69. o OS/2 2.x or higher and Warp 
  70.  
  71. o requires a minimum of 6 megabytes of RAM. 
  72.  
  73. o requires 500k of disk space. 
  74.  
  75.  
  76. ΓòÉΓòÉΓòÉ 1.4. Version History. ΓòÉΓòÉΓòÉ
  77.  
  78. The following is a basic history of changes for each version and release. 
  79.  
  80.  
  81. ΓòÉΓòÉΓòÉ 1.4.1. Version 2.21 Apr 30, 1997 ΓòÉΓòÉΓòÉ
  82.  
  83. Documentation update.  Removed references to Assocication of Shareware 
  84. Professionals and UUNET access. 
  85.  
  86. CreateIndex and AddTagToMDX ignored the RexxBase.Unique value. 
  87.  
  88. Memo Field wiped out during update if the field is preceded by a date field 
  89.  
  90.  
  91. ΓòÉΓòÉΓòÉ 1.4.2. Version 2.20 Sept 30, 1996 ΓòÉΓòÉΓòÉ
  92.  
  93. MDX Tag file logic control improved. 
  94.  
  95. Added new Control variable RexxBase.IncludeCentury.  If it is set to YES then 
  96. all date logic and routines require century to be used in date fields. 
  97.  
  98. Corrected date calculation logic. 
  99.  
  100. ScanForRecord (rv) failed to set file positioning parameters when BOF was 
  101. reached. 
  102.  
  103. SummarizeDBF correction. 
  104.  
  105. GotoRecord function failed with MDX files. 
  106.  
  107. Added ADDON.EXT file for VisPro REXX users. 
  108.  
  109.  
  110. ΓòÉΓòÉΓòÉ 1.4.3. Version 2.11 May 1, 1996 ΓòÉΓòÉΓòÉ
  111.  
  112. Unique logic corrected,  duplicate keys were added to indexes even with unique 
  113. switch set to true. 
  114.  
  115. Simplified and improved export/import functions. 
  116.  
  117. Current key not set correctly. Broke update logic. 
  118.  
  119. Improved indexing logic for tags. 
  120.  
  121. Packing logic improved. 
  122.  
  123.  
  124. ΓòÉΓòÉΓòÉ 1.4.4. Version 2.10 March 21, 1996 ΓòÉΓòÉΓòÉ
  125.  
  126.  Added new function to registered DLL.  RexxBase_WriteDBFWithLock. This will 
  127. allow serialization of database writes and prevent errors when multiple hits 
  128. occur to the same database file and associated index and text files. 
  129.  
  130. Added database variable "databasename".dbasefileformat.   This returns dBase3 
  131. or dBase4, based on the dbf's format.  Note: without MDX files or MEMO fields a 
  132. DBF file format defaults to dBase3. 
  133.  
  134. Added internal record locking to registered version (rv) through the use of 
  135. semaphores. 
  136.  
  137. Added database variable "databasename".dbasefileformat.   This returns dBase3 
  138. or dBase4, based on the dbf's format.  Note: without MDX files or MEMO fields a 
  139. DBF file format defaults to dBase3. 
  140.  
  141. Recompiled INSTALL.EXE and REXXBASE.EXE with newest version of VisPro/REXX. 
  142. (3.01). 
  143.  
  144. DLL program would allow for only 3 MDX tags. 
  145.  
  146. EXE program could not create indexes with numeric fields. 
  147.  
  148. Modify function was using the current file's dBaseFileFormat field instead of 
  149. the global field.  Thereby, preventing conversions of files from one format to 
  150. another. 
  151.  
  152. Documentation failed to fully describe the RexxBase.ERROR control variable. 
  153.  
  154. Corrected documentation with regards to specifying a TAG name when opening a 
  155. file. 
  156.  
  157. Writes followed immediately by an Update would not create valid indexes and 
  158. caused SYS3175 errors. 
  159.  
  160. Corrected EXE errors when catalog file contained a DBF that doesn't exist. 
  161.  
  162. Corrected problem when adding an MDX tag in the EXE.  The tag name would not 
  163. show up. 
  164.  
  165. PackDBF function didn't update the header correctly. 
  166.  
  167.  
  168. ΓòÉΓòÉΓòÉ 1.4.5. Version 2.06 January 22, 1996 ΓòÉΓòÉΓòÉ
  169.  
  170.  Install program was marked as not executable. 
  171.  
  172.  
  173. ΓòÉΓòÉΓòÉ 1.4.6. Version 2.05 January 2, 1996 ΓòÉΓòÉΓòÉ
  174.  
  175.  Install program now looks for config.sys in BOOTed drive. 
  176.  
  177.  If unable to allocate memory in OPEN function was causing a 3175 error. 
  178.  
  179.  Enhanced record scope. 
  180.  
  181.  Added logic to allow binary data to be stored in CHAR and MEMO fields. 
  182. RexxBase.UseStringLengths = "YES|NO" 
  183.  
  184.  Corrected ModifyDBF function causing a 3175 error. 
  185.  
  186.  Added code to registered version to prevent copyright notice from being 
  187. displayed. 
  188.  
  189.  Improved Export/Import function handling of signed numeric data. 
  190.  
  191.  
  192. ΓòÉΓòÉΓòÉ 1.4.7. Version 2.04  Sept 30, 1995 ΓòÉΓòÉΓòÉ
  193.  
  194. ReadPrevDBF and others failed when GOTORecord(bottom) was used. 
  195.  
  196. UpdateDBF failed for both NDX and MDX indexes. 
  197.  
  198. Packing dBase IV style DBT files used incorrect blocking factor. This could and 
  199. most likely did create exception conditions. 
  200.  
  201. Packing dBase IV MDX files got larger in size. 
  202.  
  203. Reset Index Logic failed to verify if any TAGs were in use. 
  204.  
  205.  
  206. ΓòÉΓòÉΓòÉ 1.4.8. Version 2.03  July 31, 1995 ΓòÉΓòÉΓòÉ
  207.  
  208. The switch AllowDuplicateIndexes now works in conjunction with the index file 
  209. indicator Duplicates Allowed. 
  210.  
  211. MDX indexing algorithm improved and corrected. 
  212.  
  213. NDX file links updated incorrectly for large files. 
  214.  
  215. SummarizeDBF function corrupted field that was before a numeric field. 
  216.  
  217. Added VX-Rexx macro facility. 
  218.  
  219. INSTALL program was not HPFS aware. 
  220.  
  221.  
  222. ΓòÉΓòÉΓòÉ 1.4.9. Version 2.02  June 15, 1995 ΓòÉΓòÉΓòÉ
  223.  
  224. Corrected documentation error. RexxBase.SkipDeleted switches use ON or OFF. 
  225.  
  226. Corrected DLL to reflect documentation: RexxBase.dBaseFileType should be 
  227. RexxBase.dBaseFileFormat.  Use RexxBase.dBaseFileFormat. 
  228.  
  229. Corrected DLL to reflect documentation: RexxBase.dBaseFileType default value is 
  230. "dbase3". 
  231.  
  232. Improved GotoRecord function.  Specifically TOP parameter and indexes now in 
  233. synch. 
  234.  
  235. CREATE and PACKING functions failed for dBase IV memo fields. 
  236.  
  237. Corrected documentation error.  References to RexxBase.AllowDuplicateIndex 
  238. corrected to RexxBase.AllowDuplicateIndexes. 
  239.  
  240. Corrected Reindex problem. Not building control blocks correctly. Function 
  241. required closing DBF before using again. 
  242.  
  243. Patched Reindex function memory leak. 
  244.  
  245. CreateDBFFrom function required closing source DBF before using again. 
  246.  
  247. Restored CloseAllDBF to unregistered version. 
  248.  
  249. Filter routines recalculated dates twice to produce incorrect results(rv). 
  250.  
  251. REXXBASE.EXE concatenated INDEX filenames incorrectly. 
  252.  
  253.  
  254. ΓòÉΓòÉΓòÉ 1.4.10. Version 2.01 May 16, 1995 ΓòÉΓòÉΓòÉ
  255.  
  256.  Shareware zip files missing component files for install process. 
  257.  
  258.  
  259. ΓòÉΓòÉΓòÉ 1.4.11. Version 2.00 May 15, 1995 ΓòÉΓòÉΓòÉ
  260.  
  261. Corrected bug with filtering routines. 
  262.  
  263. Corrected bug with duplicate indexes not being caught. 
  264.  
  265. Corrected bug in Rexxbase_DateCalc. 
  266.  
  267. Added function Rexxbase_DayOfWeek to registered version. 
  268.  
  269.  
  270. ΓòÉΓòÉΓòÉ 1.4.12. Version 2.00 BETA Apr. 15, 1995 ΓòÉΓòÉΓòÉ
  271.  
  272.  Introduced dBase IV MDX files and the following new functions: 
  273.  
  274. o RexxBase_SetIndexTagName 
  275.  
  276. o RexxBase_CreateMultipleIndexFile 
  277.  
  278. o RexxBase_AddTagToIndex 
  279.  
  280. o RexxBase_DropTagFromIndex 
  281.  
  282. o RexxBase_LockRecord 
  283.  
  284. o RexxBase_FindAndLockRecord 
  285.  
  286. o RexxBase_GotoAndLockRecord 
  287.  
  288. Introduced several new control fields: 
  289.  
  290. o RexxBase.AllowDuplicateIndexes 
  291.  
  292. o Rexxbase.Logical 
  293.  
  294. o RexxBase.SkipDeleted 
  295.  
  296. o RexxBase.dBaseFileType 
  297.  
  298. Introduced several new database control variables: 
  299.  
  300. o dbfname.IndexCount 
  301.  
  302. o dbfname.IndexFilename 
  303.  
  304. o dbfname.IndexFileType.xxx 
  305.  
  306. o dbfname.IndexFields.xxx 
  307.  
  308. o dbfname.IndexTagname.xxx.yyy 
  309.  
  310. o dbfname.IndexTagFields.xxx.yyy 
  311.  
  312. o dbfname.IndexValue.xxx(.yyy) 
  313.  
  314. Corrected several bugs and documentation errors. 
  315.  
  316. Bug in subroutine db3_create_index failed to generate valid anchor block. 
  317.  
  318. Documentation failed to inform that the filter string of the RexxBase_FilterDBF 
  319. and RexxBase_ScanForRecord must be enclosed in quotes. 
  320.  
  321.  
  322. ΓòÉΓòÉΓòÉ 1.5. American Coders Ltd. ΓòÉΓòÉΓòÉ
  323.  
  324. American Coders, LTD. 
  325.  
  326. Post Office Box 97462 
  327.  
  328. Raleigh, NC 27624 
  329.  
  330. (919) 846-2014 
  331.  
  332. CompuServe ID:  74150,2370 
  333.  
  334. Programming Solutions For Your Business 
  335.  
  336.  
  337. ΓòÉΓòÉΓòÉ 1.6. How To Install ΓòÉΓòÉΓòÉ
  338.  
  339. Use the INSTALL.EXE that came with this program 
  340.  
  341. The install program allows you to specify if you want your CONFIG.SYS file 
  342. updated.  If you chose this you will be prompted for a backup filename. 
  343.  
  344. You can specify if you want all the files moved to the target directory. 
  345.  
  346. Copy the RXBASCAT.DBF and RXBASCAT.MDX files to the target directory. 
  347.  
  348. Have the RexxBase Front-End program copied to the desktop. 
  349.  
  350. RexxBase is distributed using the shareware system. Every shareware copy of the 
  351. program comes with a 30 day trial offer.  If after 30 days the user finds the 
  352. RexxBase product acceptable they are expected to register and pay $95.00 plus 
  353. shipping/handling/taxes.  Registered users of the product receive a free 
  354. upgrade to the current release, 90 days free support on CompuServe and 30 days 
  355. free telephone support. 
  356.  
  357.  
  358. ΓòÉΓòÉΓòÉ 1.7. What Registering Gets You. ΓòÉΓòÉΓòÉ
  359.  
  360. When you register you receive: 
  361.  
  362. o The registered user DLL. 
  363.  
  364. o Limited rights to distribute the DLL. 
  365.  
  366. o Upgrade to the next release and immediate bug fixes. 
  367.  
  368. o Hardcopy documentation. 
  369.  
  370. o One months telephone and e-mail support. 
  371.  
  372.  
  373. ΓòÉΓòÉΓòÉ 1.8. How To Register Your Copy ΓòÉΓòÉΓòÉ
  374.  
  375. We have several methods for you to register your copy of RexxBase. 
  376.  
  377. o Registration Form. 
  378.  
  379. o PsL - Public Software Library - 800/Fax/WWW Credit Card Orders. 
  380.  
  381. o BMT - BMT Micro - 800/Fax/WWW Credit Card Orders 
  382.  
  383. o Immediate BBS Download - with Credit Card. 
  384.  
  385. o CompuServe SWREG. 
  386.  
  387. There is also a shipping and handling charge.  For U.S. and Canada 
  388. registrations it is $5.00. For all other international orders $10.00. 
  389.  
  390. If you are planning to order ten (10) or more copies use the SITELICE.DOC in 
  391. your package. 
  392.  
  393.  
  394. ΓòÉΓòÉΓòÉ 1.8.1. Registration Form. ΓòÉΓòÉΓòÉ
  395.  
  396. Print out the file REGISTER.FRM.  Attach a check and mail to us using the 
  397. address on the form (or see above). 
  398.  
  399.  
  400. ΓòÉΓòÉΓòÉ 1.8.2. PsL - Public Software Library - 800/Fax/WWW Credit Card Orders. ΓòÉΓòÉΓòÉ
  401.  
  402. American Coders is using the services of PsL "Public (software) Library". They 
  403. provide a service for all shareware authors, for a small fee, paid by the 
  404. author, they will take credit card orders through their 800 number and Fax. 
  405. Once PsL has notified us of your order, we will ship it within two days. 
  406.  
  407. PsL does NOT handle question or inquiries. 
  408.  
  409. RexxBase Psl item/product number is 11174. 
  410.  
  411. CREDIT CARD ORDERS ONLY - 
  412.  
  413. You can order with MC, Visa, AMEX, or Discover from Public (software) Library 
  414. by calling 800-2424-PsL or 713-524-6394 or by FAX to 713-524-6398 or by CIS 
  415. Email to 71355,470. You can also mail credit card orders to PsL at P.O.Box 
  416. 35705, Houston, TX 77235-5705. 
  417.  
  418. THE ABOVE NUMBERS ARE FOR ORDERS ONLY. 
  419.  
  420. Any questions about the status of the shipment of the order, refunds, 
  421. registration options, product details, technical support, volume discounts, 
  422. dealer pricing, site licenses, etc., must be directed to 919-846-2014 or write 
  423. American Coders at our address. 
  424.  
  425. To insure that you get the latest version, PsL will notify you the day of your 
  426. order and we will ship the product directly to you. 
  427.  
  428.  
  429. ΓòÉΓòÉΓòÉ 1.8.3. BMT - BMT Micro - 800/Fax/WWW Credit Card Orders ΓòÉΓòÉΓòÉ
  430.  
  431. American Coders is using the services of BMT Micro. They provide a service for 
  432. all shareware authors, for a small fee, paid by the author, they will take 
  433. credit card orders through their BBS, Internet Web site, 800 number and Fax. 
  434. Once BMT has notified us of your order, we will ship it within two days. 
  435. BMT Micro 
  436. PO Box 15016 
  437. Wilmington, NC 28408 U.S.A. 
  438.  
  439. Voice Orders: 8am - 7pm EST (-5 GMT) 
  440. (800) 414-4268 (orders only) 
  441. (910) 791-7052 
  442.  
  443. Fax Orders: (910) 350-2937  24 hours / 7 Days 
  444.        (800) 672-1672  24 hours / 7 Days 
  445.  
  446. Online Orders via modem (910) 350-8061  10 lines, all 14.4K 
  447.               (910) 799-0923  Direct 28.8K line 
  448.  
  449.  
  450. Ordering and general ordering questions: 
  451.    Via AOL bmtmicro 
  452.    Via MSN bmtmicro 
  453.    Via Prodigy HNGP66D 
  454.    Via Compuserve 74031,307 
  455.    via Internet orders@bmtmicro.com 
  456.          telnet@bmtmicro.com 
  457.          http://www.wilmington.net/bmtmicro 
  458.  
  459.  BMT accepts Visa, Mastercard, Discover, American Express, Money Order, 
  460. Cashiers Check, Personal Check.  Please do not send cash in the mail.  Personal 
  461. checks are subject to clearance. 
  462.  
  463.  
  464. ΓòÉΓòÉΓòÉ 1.8.4. Another Credit Card Method And Faster Too. ΓòÉΓòÉΓòÉ
  465.  
  466. Peter Norloff's OS2SHAREWARE Bulletin Board will allow you to register. 
  467. OS2SHAREWARE accepts MC/Visa orders.  Once the order has been placed you 
  468. immediately receive your copy of the register package. While this copy may be 
  469. the fully registered version, you'll want to let us know you are out there. 
  470. Inside the package there is a I AM REGISTERED form. Fill it out and mail to us. 
  471. This will guarantee you receive the free upgrade you're due. 
  472.  
  473. Call (In VA. USA) 1-703-385-4325.  Follow the directions from the main menu for 
  474. registering shareware. 
  475.  
  476.  
  477. ΓòÉΓòÉΓòÉ 1.8.5. CompuServe SWREG. ΓòÉΓòÉΓòÉ
  478.  
  479. CompuServe offers a service to register shareware software. 
  480.  
  481. GO SWREG and follow the directions. 
  482.  
  483. RexxBase SWREG number is 1953. 
  484.  
  485. Charges are billed to your CompuServe account. 
  486.  
  487. Any questions about the status of the shipment of the order, refunds, 
  488. registration options, product details, technical support, volume discounts, 
  489. dealer pricing, site licenses, etc, must be directed to 919-846-2014 or write 
  490. American Coders at our address. 
  491.  
  492.  
  493. ΓòÉΓòÉΓòÉ 2. RexxBase File Structures. ΓòÉΓòÉΓòÉ
  494.  
  495. Every attempt has been made to keep the RexxBase DBF, DBT, MDX and NDX files 
  496. similar. But due to the inherent differences between DOS, OS2, REXX and PRG 
  497. files we could not make the fully functional features of a MDX or NDX file 
  498. similar.  For example, no dBase functions are allowed in index definitions. 
  499.  
  500.  
  501. ΓòÉΓòÉΓòÉ 2.1. File Naming. ΓòÉΓòÉΓòÉ
  502.  
  503. RexxBase does not assume default file extensions.  This due to the inherent 
  504. nature of HPFS files with its flexible file names. When opening and creating 
  505. files be sure to use the DBF, NDX and MDX suffix. Since memo files are never 
  506. defined, DBT files are the exception to this rule. 
  507.  
  508.  
  509. ΓòÉΓòÉΓòÉ 2.2. Database (DBF) File. ΓòÉΓòÉΓòÉ
  510.  
  511. There should be no difference between RexxBase DBF files and other xBase DBF. 
  512. If you feel that you found an inconsistency with RexxBase DBF files, please 
  513. notify us immediately. 
  514.  
  515.  
  516. ΓòÉΓòÉΓòÉ 2.3. Memo (DBT) File. ΓòÉΓòÉΓòÉ
  517.  
  518. There two different formats for DBT files. Both are dependent on which file 
  519. type was used when the DBF file is created. 
  520.  
  521. DBT files used to store MEMO field data, look like regular variables to Rexx. 
  522. With our testing, we have stored fields up to 262144 bytes in length. The 
  523. theoretical limit is 2^32-1.  This may incompatible with other xBase products. 
  524. Please refer to the Memo and binary data storage sections for more information. 
  525.  
  526.  
  527. ΓòÉΓòÉΓòÉ 2.3.1. Memo (DBT) File for dBase III format. ΓòÉΓòÉΓòÉ
  528.  
  529. dBase III files use a less dynamic storage algorithm. These files tend to get 
  530. rather large if the DBF file is not packed often. 
  531.  
  532. DBT files used to store MEMO field data.  With our testing, we have stored 
  533. fields up to 262144 bytes in length. The theoretical limit is 2^32-1. This may 
  534. incompatible with other xBase products. Please refer to the Memo and binary 
  535. data storage sections for more information. 
  536.  
  537.  
  538. ΓòÉΓòÉΓòÉ 2.3.2. Memo (DBT) File for dBase IV format. ΓòÉΓòÉΓòÉ
  539.  
  540. dBase IV files use a garbage collection algorithm to reuse space from formerly 
  541. used memo disk space. The algorithm is a LRU. While the files won't grow as 
  542. rapidly as dBase III DBTs. It's still a good idea to pack the associated DBF. 
  543.  
  544.  
  545. ΓòÉΓòÉΓòÉ 2.4. Index (NDX) File Field Differences. ΓòÉΓòÉΓòÉ
  546.  
  547. The ability to use index files is an integral part of any good database system. 
  548. We have introduced, what we feel, is an improved, yet limited, features to 
  549. index files in RexxBase. 
  550.  
  551. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  552. ΓöéDifferenceΓöéDescription                                  Γöé
  553. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  554. ΓöéSimple    ΓöéRexxBase does not use xBase functions within Γöé
  555. ΓöéData TypesΓöéindex functions.  Nor does it use inverse    Γöé
  556. Γöé          Γöédefinitions, i.e. using a minus sign to move Γöé
  557. Γöé          Γöéin a reverse key scan.                       Γöé
  558. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  559. ΓöéMixing    ΓöéRexxBase allows the mixing of Character,     Γöé
  560. ΓöéData TypesΓöéNumeric and Date data types.  All data in    Γöé
  561. Γöé          Γöéthis format are treated as Character by      Γöé
  562. Γöé          ΓöéRexxBase.                                    Γöé
  563. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  564. ΓöéDate Data ΓöéDate data types are treated as Character dataΓöé
  565. ΓöéTypes     Γöéand stored in the index in the native format.Γöé
  566. Γöé          ΓöéDate data types can be concatenated together Γöé
  567. Γöé          Γöéwith other data types. Some xBase products   Γöé
  568. Γöé          Γöéstore date in the index in a floating point  Γöé
  569. Γöé          Γöéformat.  By removing the floating point      Γöé
  570. Γöé          Γöéformat you should see a improvement in index Γöé
  571. Γöé          Γöéfile accessing for data types.               Γöé
  572. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  573. ΓöéNumeric   ΓöéNumeric data types are stored in a floating  Γöé
  574. ΓöéData TypesΓöépoint format.  When a key is defined as      Γöé
  575. Γöé          Γöénumeric all of the fields are summed         Γöé
  576. Γöé          Γöétogether.                                    Γöé
  577. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  578. ΓöéAccessing ΓöéThe only time you may access NDX files from  Γöé
  579. ΓöéxBase NDX Γöéother xBase programs is if the dBase index   Γöé
  580. Γöéfiles.    Γöéfile is strictly Character or Numeric fields Γöé
  581. Γöé          ΓöéONLY. Indexes using xBase functions are not  Γöé
  582. Γöé          Γöésupported by RexxBase.                       Γöé
  583. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  584.  
  585. See also Rexxbase.Unique. 
  586.  
  587. See also Rexxbase.AllowDuplicateIndexes. 
  588.  
  589.  
  590. ΓòÉΓòÉΓòÉ 2.5. Multiple Index (MDX) File Field Differences. ΓòÉΓòÉΓòÉ
  591.  
  592. The ability to use index files is an integral part of any good database system. 
  593. We have introduced, what we feel, is an improved, yet limited, features to 
  594. index file in RexxBase. 
  595.  
  596. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  597. ΓöéDifferenceΓöéDescription                                  Γöé
  598. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  599. ΓöéSimple    ΓöéRexxBase does not use xBase functions within Γöé
  600. ΓöéData TypesΓöéindex functions.  Nor does it use inverse    Γöé
  601. Γöé          Γöédefinitions, i.e.  using a minus sign to moveΓöé
  602. Γöé          Γöéin a reverse key scan.                       Γöé
  603. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  604. ΓöéMixing    ΓöéRexxBase allows the mixing of Character,     Γöé
  605. ΓöéData TypesΓöéNumeric and Date data types.  All data in    Γöé
  606. Γöé          Γöéthis format are treated as Character by      Γöé
  607. Γöé          ΓöéRexxBase.                                    Γöé
  608. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  609. ΓöéDate Data ΓöéDate data types are treated as Character dataΓöé
  610. ΓöéTypes     Γöéand stored in the index in the native format.Γöé
  611. Γöé          ΓöéDate data types can be concatenated together Γöé
  612. Γöé          Γöéwith other data types. Some xBase products   Γöé
  613. Γöé          Γöéstore date in the index in a floating point  Γöé
  614. Γöé          Γöéformat.  By removing the floating point      Γöé
  615. Γöé          Γöéformat you should see a improvement in index Γöé
  616. Γöé          Γöéfile accessing for data types.               Γöé
  617. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  618. ΓöéNumeric   ΓöéNumeric data types are stored in a floating  Γöé
  619. ΓöéData TypesΓöépoint format.  When a key is defined as      Γöé
  620. Γöé          Γöénumeric all of the fields are summed         Γöé
  621. Γöé          Γöétogether.                                    Γöé
  622. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  623. ΓöéAccessing ΓöéThe only time you may access MDX files from  Γöé
  624. ΓöéxBase MDX Γöéother xBase programs is if the dBase index   Γöé
  625. Γöéfiles.    Γöéfile is strictly Character or Numeric fields Γöé
  626. Γöé          ΓöéONLY. Indexes using xBase functions are not  Γöé
  627. Γöé          Γöésupported by RexxBase.                       Γöé
  628. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  629. ΓöéFOR       ΓöéThe FOR logical filter is not supported.     Γöé
  630. Γöéfilters.  Γöé                                             Γöé
  631. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  632. ΓöéDescendingΓöéDescending indexes are not supported.        Γöé
  633. ΓöéIndexes   Γöé                                             Γöé
  634. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  635.  
  636. See also Rexxbase.Unique. 
  637.  
  638. See also Rexxbase.AllowDuplicateIndexes. 
  639.  
  640.  
  641. ΓòÉΓòÉΓòÉ 3. How Initialize REXX For RexxBase Functions. ΓòÉΓòÉΓòÉ
  642.  
  643. Before calling any RexxBase functions your REXX command file must register the 
  644. RexxBase DLL.  To do this use the REXX command RXFUNCADD.  You need to register 
  645. only one RexxBase function - Rexxbase_Init.  Rexxbase_Init, when called, will 
  646. register all of the other RexxBase routines.  Since Rexxbase_Init cannot 
  647. register itself, your Rexx program must register it. 
  648.  
  649. Use RXFUNCADD to register the Rexxbase_Init function. 
  650.  
  651. Once registered, RexxBase will not have to be registered until the next time 
  652. you restart OS/2. 
  653.  
  654. If you want your REXX program can register the RexxBase functions. 
  655.  
  656. The format of the command is RXFUNCADD(FUNCTION, DLL, PROCEDURE) 
  657.  
  658. FUNCTION is the name of the RexxBase routine as your procedure will call it. 
  659.  
  660. DLL is the name of the RexxBase DLL file.  (Unless you rename it, it will 
  661. always be REXXBASE). 
  662.  
  663. PROCEDURE is the name of the function internal to the RexxBase DLL. 
  664.  
  665. Your program should contain the following: 
  666.  
  667. /* REXX */
  668. ret = rxfuncadd(rexxbase_init,Rexxbase,"Rexxbase_Init")
  669. ret = rexxbase_init()
  670.  
  671.  
  672. ΓòÉΓòÉΓòÉ 3.1. Example of Dropping a RexxBase Function. ΓòÉΓòÉΓòÉ
  673.  
  674. When your procedure is done with the RexxBase functions it can drop the 
  675. RexxBase functions.  This may help reduce memory requirements and free up 
  676. system resources.  Once dropped, a function will have to be reregistered if it 
  677. is to be used again. 
  678.  
  679. rxfuncdrop(rexxbase_opendbf,Rexxbase,"Rexxbase_OpenDBF") 
  680.  
  681. Return codes most likely to be returned are: 
  682.  
  683. o  0 - OK. 
  684. o  40 - function not found. 
  685.  
  686. For more information about return codes from Rexx, refer to the IBM 
  687. documentation. 
  688.  
  689.  
  690. ΓòÉΓòÉΓòÉ 4. The RexxBase Functions. ΓòÉΓòÉΓòÉ
  691.  
  692. This release of RexxBase offers several functions to read, write and update 
  693. your database records.  Also available are functions to create database, modify 
  694. database structures and to sort databases. 
  695.  
  696.  
  697. ΓòÉΓòÉΓòÉ 4.1. General Database Processing Functions. ΓòÉΓòÉΓòÉ
  698.  
  699. The following are considered general functions.  These functions allow you to 
  700. open, read, write, update, move within, and close database files. 
  701.  
  702.  
  703. ΓòÉΓòÉΓòÉ 4.1.1. Rexxbase_OpenDBF. ΓòÉΓòÉΓòÉ
  704.  
  705. Description.  Prior to processing a database file, the file must be opened. 
  706. When your procedure opens the database file several activities occur. 
  707.  
  708. o The database file is opened. 
  709. o RexxBase creates database related stem variable concerning system and file 
  710.   status. 
  711. o RexxBase creates a stem variable containing field names, types and sizes. 
  712. o If indexes are specified then these files are opened. 
  713.  
  714. Purpose. 
  715.  
  716. To open the database for processing. 
  717.  
  718. Format. 
  719.  
  720. rexxbase_opendbf('dbfname'[,'TAG=tagfieldname'index1|[,index2[,..]]]) 
  721.  
  722. Parameters. 
  723.  
  724. dbfname 
  725.           The REXX variable contains the name of your database as it is known 
  726.           to the operating system. 
  727. TAG='tagfieldname' 
  728.           If the DBF has an associated MDX file you can open the DBF and 
  729.           specify which TAG to be used as an index. Due to the interpretive 
  730.           nature of REXX, place this option in quotes. Otherwise REXX will 
  731.           interpret it as a logical statement and replace with either 1(TRUE) 
  732.           or 0(FALSE). THIS IS AN OPTIONAL PARAMETER AND MUST BE SPECIFIED 
  733.           IMMEDIATELY AFTER THE DBF OPTION. 
  734. index1 
  735.           The master index file name as it is known to the operating system. 
  736.           Unlike the dbfname, which is the REXX variable name passed within 
  737.           quotes.  The index file name is the OS/2 filename.  You can use a 
  738.           REXX variable to pass the name, just don't put it in quotes.  THIS IS 
  739.           AN OPTIONAL PARAMETER. 
  740. index2 .. 
  741.           The alternative index file names as they are known to the operating 
  742.           system. Like the master index file name, they are the OS/2 filenames. 
  743.           You can use a REXX variable to pass the name, just don't put it in 
  744.           quotes.  THIS IS AN OPTIONAL PARAMETER. 
  745.  
  746. You must set the database name in the variable prior to use.  And you must pass 
  747. the variable name in a string.  For example. 
  748.  
  749. myfilename = 'c:\xbase\machines.dbf'
  750. ret = rexxbase_opendbf('myfilename')
  751.  
  752. Return Value  Description 
  753.  
  754. ''. 
  755.           Normal 
  756.  
  757. No REXX DBF Name Specified 
  758.           The first parameter of function call is missing. 
  759.  
  760. Bad Variable Name 
  761.           The variable name passed to the routine is not valid 
  762.  
  763. No File Name Assigned To Variable. 
  764.           The variable was not assigned a value. 
  765.  
  766. Database Name Already In Use. 
  767.           The name passed is already assigned to another opened database. 
  768.  
  769. Can't Open. 
  770.           Operating System error.  File and system errors are written to the 
  771.           console, printer or  rexxbase.error  stem variable. 
  772.  
  773. Missing Index Filename, Database Is Open. 
  774.           The MDX file switch is set in the database control block, but the 
  775.           associated MDX file can not be found. 
  776.  
  777. Can't Open Index, Database File Opened. 
  778.           The RexxBase could not open any one of the index files specified. 
  779.           Depending on which file failed, any index files specified after it 
  780.           will not be opened. 
  781.  
  782. Database Tied To A Join 
  783.           The database is already in use by the RexxBase_JoinDBF function. (See 
  784.           registered user functions.) 
  785.  
  786. Missing Index Tag Name,  Database is open. 
  787.           Tag was used as second parameter but no tag field name was found. 
  788.  
  789. No Index Tag File Opened,  Database is open. 
  790.           The DBF does not have an associated MDX file. 
  791.  
  792. Tag Index File Has No Tags,  Database is open. 
  793.           The MDX file has no tags defined 
  794.  
  795. Index Tag Name Not Found,  Database is open. 
  796.           The tag field name used in the second parameter was not found in the 
  797.           tag field list of the MDX. 
  798.  
  799.  For multi-user access refer to the following RexxBase variable: 
  800.  
  801. o Rexxbase.Read 
  802.  
  803. o Rexxbase.Write 
  804.  
  805. o Rexxbase.Share 
  806.  
  807. Sample Without An Index File 
  808.  
  809. /* REXX */
  810. dbf = 'c:\users\net.dbf'
  811. ret = rexxbase_opendbf('dbf')
  812. if ret \= '' then do
  813.    say ret
  814.    exit
  815.  end
  816.  
  817. Sample With An Index File 
  818.  
  819. /* REXX */
  820. dbf = 'c:\users\net.dbf'
  821. ret = rexxbase_opendbf('dbf','c:\users\net.ndx')
  822. if ret \= '' then do
  823.   say ret
  824.   exit
  825. end
  826.  
  827. Sample With A TAG 
  828.  
  829. /* REXX */
  830. dbf = 'c:\users\net.dbf'
  831. ret = rexxbase_opendbf('dbf','TAG=NETNAME')
  832. if ret \= '' then do
  833.   say ret
  834.   exit
  835. end
  836.  
  837.  
  838. ΓòÉΓòÉΓòÉ 4.1.2. Rexxbase_CloseDBF. ΓòÉΓòÉΓòÉ
  839.  
  840. Description.  When your procedure is done using the database file it should be 
  841. closed.  This allows your program to update the file correctly. 
  842.  
  843. Purpose. 
  844.  
  845. To close the database. 
  846.  
  847. Format. 
  848.  
  849. rexxbase_closedbf('dbfname') 
  850.  
  851. Parameters. 
  852.  
  853. dbfname 
  854.           The REXX variable contains the name of your database as you defined 
  855.           it in the Rexxbase_OpenDBF function. 
  856.  
  857. The name of the database is defined in a REXX variable.  You must pass the 
  858. variable name in a string.  For example. 
  859.  
  860. myfilename = 'c:\xbase\machines.dbf'
  861. ret = rexxbase_closedbf('myfilename')
  862.  
  863. Return Value  Description 
  864.  
  865. ''. 
  866.           Normal 
  867.  
  868. No REXX DBF name Specified 
  869.           The first parameter of function call is missing. 
  870.  
  871. Unknown Database Name. 
  872.           The name found, in the passed parameter, is not the same used to open 
  873.           a database. 
  874.  
  875. Database Tied To A Join 
  876.           The database is already in use by the RexxBase_JoinDBF function. (See 
  877.           registered user functions.) 
  878.  
  879. Sample. 
  880.  
  881. /* REXX */
  882. dbf = 'c:\users\net.dbf'
  883. ret = rexxbase_opendbf('dbf')
  884. if ret \= '' then do
  885.    say ret
  886.    exit
  887.  end
  888. ret = rexxbase_closedbf('dbf')
  889. if ret \= '' then do
  890.   say ret
  891.   exit
  892.  end
  893. say the number of dbf record(s) are dbf.recordcount
  894.  
  895. Trick. Since the REXX environment is an integral part of the operating system 
  896. and persistent nature of the REXX variable pool, you will run into trouble if 
  897. you inadvertently leave a database open. One trick to get around this problem 
  898. is to close the DBF before you open it.  If you ignore the return code from 
  899. RexxBase your program will continue to operate as normal. 
  900.  
  901.  
  902. ΓòÉΓòÉΓòÉ 4.1.3. Rexxbase_CloseAllDBF. ΓòÉΓòÉΓòÉ
  903.  
  904. Description.  When your procedure is done using all of the database files they 
  905. should be closed.  This allows your program to update the files correctly. 
  906.  
  907. Purpose. 
  908.  
  909. To close all opened databases. 
  910.  
  911. Format. 
  912.  
  913. rexxbase_closealldbf() 
  914.  
  915. Parameters. 
  916.  
  917. N/A 
  918.           N/A 
  919.  
  920. The function does not use any parameters. For example, 
  921.  
  922. rexxbase_closealldbf()
  923.  
  924. Return Value  Description 
  925.  
  926. ''. 
  927.           Normal 
  928.  
  929. Even though there are no other return values.  The internal processing errors 
  930. may be found in the  rexxbase.error  stem variable. 
  931.  
  932. Sample. 
  933.  
  934. /* REXX */
  935. dbf = 'c:\users\net.dbf'
  936. ret = rexxbase_opendbf('dbf')
  937. if ret \= '' then do
  938.   say ret
  939.   exit
  940.  end
  941. dbf2 = 'c:\users\addr.dbf'
  942. ret = rexxbase_opendbf('dbf2',addr.ndx)
  943. if ret \= '' then do
  944.   say ret
  945.   exit
  946.  end
  947. ret = rexxbase_closealldbf)
  948. if ret \=''  then do
  949.   say ret
  950.   exit
  951.  end
  952.  
  953.  
  954. ΓòÉΓòÉΓòÉ 4.1.4. Rexxbase_ReadDBF. ΓòÉΓòÉΓòÉ
  955.  
  956. Description.  Read the database fields into the REXX variables.  This commands 
  957. reads the next record in the file. 
  958.  
  959. Purpose. 
  960.  
  961. To read the next sequential record in the database. 
  962.  
  963. If the database was opened with an index, then the next record in the index 
  964. list is read. 
  965.  
  966. Format. 
  967.  
  968. rexxbase_readdbf('dbfname') 
  969.  
  970. Parameters. 
  971.  
  972. dbfname 
  973.           The REXX variable contains the name of your database as you defined 
  974.           it in the Rexxbase_OpenDBF function. 
  975.  
  976. This function can avoid reading deleted records by setting 
  977. Rexxbase.SkipDeleted. 
  978.  
  979. The name of the database is defined in a REXX variable.  You must pass the 
  980. variable name in a string.  For example. 
  981.  
  982. /* REXX */
  983. myfilename = 'c:\xbase\machines.dbf'
  984. rexxbase_readdbf('myfilename')
  985.  
  986. Return Value  Description 
  987.  
  988. ''. 
  989.           Normal 
  990.  
  991. No REXX DBF Name Specified 
  992.           The first parameter of function call is missing. 
  993.  
  994. BOF. 
  995.           End of file condition.  No record is read.  Record field values 
  996.           remain unchanged. 
  997.  
  998. Unknown Database Name. 
  999.           The name found in the passed parameter is not the same used to open 
  1000.           the database. 
  1001.  
  1002. Internal File Processing Error. 
  1003.           Record area could not be read. Find the XX error code in the 
  1004.           rexxbase.error  stem variable. Where XX is a return code from OS/2. 
  1005.           If XX is equal to 5 then the operating system is denying access to 
  1006.           that area.  If XX is equal to 33 then the record area has been 
  1007.           locked.  For other values you can type on the command line 'HELP XX' 
  1008.           to find the values for XX. 
  1009.  
  1010. Record Locked 
  1011.           The file has been locked by another process. 
  1012.  
  1013. Database Tied To A Join 
  1014.           The database is already in use by the RexxBase_JoinDBF function. (See 
  1015.           registered user functions.) 
  1016.  
  1017. Sample. 
  1018.  
  1019. /* REXX */
  1020. dbf = 'c:\users\net.dbf'
  1021. ret = rexxbase_opendbf('dbf')
  1022. if ret \= '' then do
  1023.   say ret
  1024.   exit
  1025.  end
  1026. ret = rexxbase_readdbf('dbf')
  1027. if ret = BOF then do
  1028.   say end of file reached
  1029.  end
  1030.  
  1031.  
  1032. ΓòÉΓòÉΓòÉ 4.1.5. Rexxbase_ReadPrevDBF. ΓòÉΓòÉΓòÉ
  1033.  
  1034. Description.  Read the database fields into the REXX variables.  This commands 
  1035. reads the previous record in the file. 
  1036.  
  1037. Purpose. 
  1038.  
  1039. To read the previous sequential record in the database. 
  1040.  
  1041. If the database was opened with an index, then the previous record in the index 
  1042. list is read. 
  1043.  
  1044. Format. 
  1045.  
  1046. rexxbase_readprevdbf('dbfname') 
  1047.  
  1048. Parameters. 
  1049.  
  1050. dbfname 
  1051.           The REXX variable contains the name of your database as you defined 
  1052.           it in the Rexxbase_OpenDBF function. 
  1053.  
  1054. This function can avoid reading deleted records by setting 
  1055. Rexxbase.SkipDeleted. 
  1056.  
  1057. The name of the database is defined in a REXX variable.  You must pass the 
  1058. variable name in a string.  For example. 
  1059.  
  1060. myfilename = 'c:\xbase\machines.dbf'
  1061. rexxbase_readprevdbf('myfilename')
  1062.  
  1063. Return Value  Description 
  1064.  
  1065. ''. 
  1066.           Normal 
  1067.  
  1068. No REXX DBF Name Specified 
  1069.           The first parameter of function call is missing. 
  1070.  
  1071. Unknown Database Name. 
  1072.           The name found in the passed parameter is not the same used to open 
  1073.           the database. 
  1074.  
  1075. Internal File Processing Error 
  1076.           Record area could not be read. Find the XX error code in the 
  1077.           rexxbase.error  stem variable. Where XX is a return code from OS/2. 
  1078.           If XX is equal to 5 then the operating system is denying access to 
  1079.           that area.  If XX is equal to 33 then the record area has been 
  1080.           locked.  For other values you can type on the command line 'HELP XX' 
  1081.           to find the values for XX. 
  1082.  
  1083. TOF. 
  1084.           Top of file condition.  No record is read.  Record field values 
  1085.           remain unchanged. 
  1086.  
  1087. Record Locked 
  1088.           The file has been locked by another process. 
  1089.  
  1090. Database Tied To A Join 
  1091.           The database is already in use by the RexxBase_JoinDBF function. (See 
  1092.           registered user functions.) 
  1093.  
  1094. Sample. 
  1095.  
  1096. /* Read the 10th and 9th records*/
  1097. dbf = 'c:\users\net.dbf'
  1098. ret = rexxbase_opendbf('dbf')
  1099. if ret \= '' then do
  1100.   say ret
  1101.   exit
  1102.  end ret =
  1103. rexxbase_gotorecord('dbf',10)
  1104. ret = rexxbase_readprevdbf('dbf')
  1105. ret = rexxbase_closedbf('dbf')
  1106.  
  1107. Trick. 
  1108.  
  1109. If you must have reverse indexes, open the database with the intended index, go 
  1110. to the BOTTOM of the database and readprev until TOF. 
  1111.  
  1112.  
  1113. ΓòÉΓòÉΓòÉ 4.1.6. Rexxbase_GoToRecord. ΓòÉΓòÉΓòÉ
  1114.  
  1115. Description.  The command will position at a specified record and read it. 
  1116.  
  1117. Purpose. 
  1118.  
  1119. To read a particular record in the database. 
  1120.  
  1121. Format. 
  1122.  
  1123. rexxbase_gotorecord('dbfname',recordnumber) 
  1124.  
  1125. Parameters. 
  1126.  
  1127. dbfname 
  1128.           The REXX variable contains the name of your database as you defined 
  1129.           it in the Rexxbase_OpenDBF function. 
  1130. recordnumber 
  1131.           The record number to read, or the following words 
  1132.  
  1133.            TOP - to go to the top of the database. 
  1134.  
  1135.            BOT or BOTTOM - to go to the bottom of the database. 
  1136.  
  1137. This function can avoid reading deleted records by setting 
  1138. Rexxbase.SkipDeleted. 
  1139.  
  1140. The name of the database is defined in a REXX variable.  You must pass the 
  1141. variable name in a string.  For example. 
  1142.  
  1143. myfilename = 'c:\xbase\machines.dbf'
  1144. rexxbase_gotorecord('myfilename',1)
  1145.  
  1146. Return Value  Description 
  1147.  
  1148. ''. 
  1149.           Normal 
  1150.  
  1151. No REXX DBF Name Specified 
  1152.           The first parameter of function call is missing. 
  1153.  
  1154. No Record Number Specified. 
  1155.           You did not pass a record number in the second argument. 
  1156.  
  1157. Unknown Database Name. 
  1158.           The name found in the passed parameter is not the same used to open 
  1159.           the database. 
  1160.  
  1161. Bad Record Number. 
  1162.           You passed a record number that is invalid or is less than one.  No 
  1163.           record is read. 
  1164.  
  1165. BOF. 
  1166.           You passed a record number that is greater than the number on the 
  1167.           file or used the BOT or BOTTOM option.  No record is read.  Record 
  1168.           field values remain unchanged. BOF is a good return code if you used 
  1169.           the BOT or BOTTOM option. 
  1170.  
  1171. TOF. 
  1172.           You used the TOP option in the record number field.  This is a good 
  1173.           return code. 
  1174.  
  1175. Record Locked 
  1176.           The file has been locked by another process. 
  1177.  
  1178. Database Tied To A Join 
  1179.           The database is already in use by the RexxBase_JoinDBF function. (See 
  1180.           registered user functions.) 
  1181.  
  1182. Sample. 
  1183.  
  1184. /* REXX */
  1185. /* assume the database has a field name AMOUNT.  */
  1186. /* this example will get the last AMOUNT on file*/
  1187. dbf = 'c:\users\net.dbf'
  1188. ret = rexxbase_opendbf('dbf')
  1189. if ret \= '' then do
  1190.   say ret
  1191.   exit
  1192.  end
  1193. ret = rexxbase_gotorecord('dbf',dbf.recordcount)
  1194. if ret = '' then say dbf.amount
  1195. ret = rexxbase_closedbf('dbf')
  1196.  
  1197.  
  1198. ΓòÉΓòÉΓòÉ 4.1.7. Rexxbase_WriteDBF. ΓòÉΓòÉΓòÉ
  1199.  
  1200. Description.  This will add a new record to the end of the database. 
  1201.  
  1202. Purpose. 
  1203.  
  1204. To add records to the database. 
  1205.  
  1206. Format. 
  1207.  
  1208. rexxbase_writedbf('dbfname') 
  1209.  
  1210. Parameters. 
  1211.  
  1212. dbfname 
  1213.           The REXX variable contains the name of your database as you defined 
  1214.           it in the Rexxbase_OpenDBF function. 
  1215.  
  1216. The name of the database is defined in a REXX variable.  You must pass the 
  1217. variable name in a string.  For example. 
  1218.  
  1219. /* */
  1220. myfilename = 'c:\xbase\machines.dbf'
  1221. ret = rexxbase_opendbf('myfilename')
  1222. rexxbase_writedbf('myfilename')
  1223. ret = rexxbase_closedbf('myfilename')
  1224.  
  1225. Return Value  Description 
  1226.  
  1227. ''. 
  1228.           Normal 
  1229.  
  1230. No REXX DBF Name Specified 
  1231.           The first parameter of function call is missing. 
  1232.  
  1233. Unknown Database Name. 
  1234.           The name found in the passed parameter is not the same used to open 
  1235.           the database. 
  1236.  
  1237. Record With Duplicate Key Not Written 
  1238.           The control variable RexxBase.AllowDuplicatesIndexes has been set to 
  1239.           NO.  A  matching index has been found.  Therefore, the record was 
  1240.           written to the DBF file.  Remember, deleted records do not have their 
  1241.           index entries removed until the database has been packed.  Also, do 
  1242.           not confuse this with the control variable RexxBase.Unique, which 
  1243.           allows all records to be written to the database but prevents a 
  1244.           duplicate index entry from being created. See 
  1245.           Rexxbase.AllowDuplicateIndexes. 
  1246.  
  1247. Database Tied To A Join 
  1248.           The database is already in use by the RexxBase_JoinDBF function. (See 
  1249.           registered user functions.) 
  1250.  
  1251. Sample. 
  1252.  
  1253. /* REXX */
  1254. /* this example copies the first record of the database to the end */
  1255. dbf = 'c:\users\net.dbf'
  1256. ret = rexxbase_opendbf('dbf')
  1257. if ret \= '' then do
  1258.   say ret
  1259.   exit
  1260.  end
  1261. ret = rexxbase_readdbf('dbf')
  1262. if ret \= '' then do
  1263.   say read failed with ret
  1264.   exit
  1265.  end
  1266. ret = rexxbase_writedbf('dbf')
  1267. if ret \  = '' then do
  1268.   say write failed with ret
  1269.   exit
  1270.  end
  1271. ret = rexxbase_closedbf('dbf')
  1272. if ret \  = '' then do
  1273.   say close failed with ret
  1274.   exit
  1275.  end
  1276.  
  1277.  
  1278. ΓòÉΓòÉΓòÉ 4.1.8. Rexxbase_UpdateDBF. ΓòÉΓòÉΓòÉ
  1279.  
  1280. Description.  This function will rewrite data at the current record position. 
  1281.  
  1282. Purpose. 
  1283.  
  1284. To update a record. 
  1285.  
  1286. Format. 
  1287.  
  1288. rexxbase_updatedbf('dbfname') 
  1289.  
  1290. Parameters. 
  1291.  
  1292. dbfname 
  1293.           The REXX variable contains the name of your database as you defined 
  1294.           it in the Rexxbase_OpenDBF function. 
  1295.  
  1296. The name of the database is defined in a REXX variable.  You must pass the 
  1297. variable name in a string.  For example. 
  1298.  
  1299. myfilename = 'c:\xbase\machines.dbf' ret =
  1300. rexxbase_updatedbf('myfilename')
  1301.  
  1302. Return Value  Description 
  1303.  
  1304. ''. 
  1305.           Normal 
  1306.  
  1307. No REXX DBF Name Specified 
  1308.           The first parameter of function call is missing. 
  1309.  
  1310. Unknown Database Name. 
  1311.           The name found in the passed parameter is not the same used to open 
  1312.           the database. 
  1313.  
  1314. Invalid Record Position 
  1315.           The current record pointer is either at TOF or BOF. It is not 
  1316.           pointing to any particular record. 
  1317.  
  1318. Record With Duplicate Key Not Updated 
  1319.           The control variable RexxBase.AllowDuplicatesIndexes has been set to 
  1320.           NO.  A  matching index has been found.  Therefore, the record was 
  1321.           written to the DBF file.  Remember, deleted records do not have their 
  1322.           index entries removed until the database has been packed.  Also, do 
  1323.           not confuse this with the control variable RexxBase.Unique, which 
  1324.           allows all records to be written to the database but prevents a 
  1325.           duplicate index entry from being created. See 
  1326.           Rexxbase.AllowDuplicateIndexes. 
  1327.  
  1328. Database Tied To A Join 
  1329.           The database is already in use by the RexxBase_JoinDBF function. (See 
  1330.           registered user functions.) 
  1331.  
  1332. Sample. 
  1333.  
  1334. /* REXX */
  1335. /* this example update the field AMOUNT on the first record of the database*/
  1336. dbf = 'c:\users\net.dbf'
  1337. ret = rexxbase_opendbf('dbf')
  1338. if ret \= '' then do
  1339.   say ret
  1340.   exit
  1341.  end
  1342. ret = rexxbase_readdbf('dbf')
  1343. if ret \= '' then do
  1344.   say read failed with ret
  1345.   exit
  1346.  end
  1347. dbf.AMOUNT = dbf.AMOUNT * 2
  1348. ret = rexxbase_updatedbf('dbf')
  1349. if ret \  = '' then do
  1350.   say update failed with ret
  1351.   exit
  1352.  end
  1353. ret = rexxbase_closedbf('dbf')
  1354. if ret \  = '' then do
  1355.   say close failed with ret
  1356.   exit
  1357.  end
  1358.  
  1359.  
  1360. ΓòÉΓòÉΓòÉ 4.2. Create and Modify Database Functions. ΓòÉΓòÉΓòÉ
  1361.  
  1362. The following functions allow you to create new or modify existing databases. 
  1363.  
  1364.  
  1365. ΓòÉΓòÉΓòÉ 4.2.1. Rexxbase_CreateDBF ΓòÉΓòÉΓòÉ
  1366.  
  1367. Description.  This will create a new database file. 
  1368.  
  1369. If the file is created with the RexxBase.dBaseFileFormat set to 'dbase4' a MDX 
  1370. file is created. 
  1371.  
  1372. Prior to calling the RexxBase Create function you must specify the fields and 
  1373. the characteristics for each field.  You do this by creating field names using 
  1374. the database variable name concatenated with the FIELD string. 
  1375.  
  1376. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1377. ΓöéDatabase  Γöé*.FIELDCOUNT   ΓöéThe number of  Γöé               Γöé          Γöé
  1378. ΓöéField     Γöé               Γöéfields to be   Γöé               Γöé          Γöé
  1379. ΓöéCount     Γöé               Γöéused for       Γöé               Γöé          Γöé
  1380. Γöé          Γöé               Γöécreating the   Γöé               Γöé          Γöé
  1381. Γöé          Γöé               Γöédatabase.      Γöé               Γöé          Γöé
  1382. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1383. ΓöéField NameΓöé*.FIELDNAME.1  ΓöéThe first fieldΓöéAny valid dBaseΓöé          Γöé
  1384. Γöé1         Γöé               Γöéname.          Γöéfield name.    Γöé          Γöé
  1385. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1386. Γöé*.'field  ΓöéThe first fieldΓöéSpecify C for  Γöé               Γöé          Γöé
  1387. Γöéname      Γöétype           Γöécharacter, L   Γöé               Γöé          Γöé
  1388. Γöé1'.TYPE   Γöé               Γöéfor Logical, M Γöé               Γöé          Γöé
  1389. Γöé          Γöé               Γöéfor Memo, N forΓöé               Γöé          Γöé
  1390. Γöé          Γöé               ΓöéNumeric and D  Γöé               Γöé          Γöé
  1391. Γöé          Γöé               Γöéfor date.  Any Γöé               Γöé          Γöé
  1392. Γöé          Γöé               Γöéother value    Γöé               Γöé          Γöé
  1393. Γöé          Γöé               Γöéwill cause the Γöé               Γöé          Γöé
  1394. Γöé          Γöé               Γöécreate functionΓöé               Γöé          Γöé
  1395. Γöé          Γöé               Γöéto fail.       Γöé               Γöé          Γöé
  1396. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1397. Γöé*.'field  ΓöéThe first fieldΓöéSpecify the    Γöé               Γöé          Γöé
  1398. Γöéname      Γöésize or length.Γöéfield length.  Γöé               Γöé          Γöé
  1399. Γöé1'.LENGTH Γöé               ΓöéFor Logical,   Γöé               Γöé          Γöé
  1400. Γöé          Γöé               ΓöéMemo and Date  Γöé               Γöé          Γöé
  1401. Γöé          Γöé               Γöéfield the size Γöé               Γöé          Γöé
  1402. Γöé          Γöé               Γöéfield is       Γöé               Γöé          Γöé
  1403. Γöé          Γöé               Γöéignored and    Γöé               Γöé          Γöé
  1404. Γöé          Γöé               ΓöéRexxBase uses  Γöé               Γöé          Γöé
  1405. Γöé          Γöé               Γöéthe default    Γöé               Γöé          Γöé
  1406. Γöé          Γöé               Γöévalues.  For   Γöé               Γöé          Γöé
  1407. Γöé          Γöé               ΓöéCharacter      Γöé               Γöé          Γöé
  1408. Γöé          Γöé               Γöéfields specify Γöé               Γöé          Γöé
  1409. Γöé          Γöé               Γöéa value from 1 Γöé               Γöé          Γöé
  1410. Γöé          Γöé               Γöéto 254.  For   Γöé               Γöé          Γöé
  1411. Γöé          Γöé               ΓöéNumeric fields Γöé               Γöé          Γöé
  1412. Γöé          Γöé               Γöéspecify the    Γöé               Γöé          Γöé
  1413. Γöé          Γöé               Γöélength in the  Γöé               Γöé          Γöé
  1414. Γöé          Γöé               Γöéformat of      Γöé               Γöé          Γöé
  1415. Γöé          Γöé               Γöélength.decimal,Γöé               Γöé          Γöé
  1416. Γöé          Γöé               Γöéwhere length isΓöé               Γöé          Γöé
  1417. Γöé          Γöé               Γöéa value from 1 Γöé               Γöé          Γöé
  1418. Γöé          Γöé               Γöéto 19 and      Γöé               Γöé          Γöé
  1419. Γöé          Γöé               Γöédecimal (no of Γöé               Γöé          Γöé
  1420. Γöé          Γöé               Γöédecimal        Γöé               Γöé          Γöé
  1421. Γöé          Γöé               Γöépositions) is 0Γöé               Γöé          Γöé
  1422. Γöé          Γöé               Γöéto 9 (one less Γöé               Γöé          Γöé
  1423. Γöé          Γöé               Γöéthan the       Γöé               Γöé          Γöé
  1424. Γöé          Γöé               Γöélength).       Γöé               Γöé          Γöé
  1425. Γöé          Γöé               ΓöéNumeric        Γöé               Γöé          Γöé
  1426. Γöé          Γöé               Γöéaccuracy is    Γöé               Γöé          Γöé
  1427. Γöé          Γöé               Γöévalid to 15    Γöé               Γöé          Γöé
  1428. Γöé          Γöé               Γöéinteger digits Γöé               Γöé          Γöé
  1429. Γöé          Γöé               Γöéand 9 decimal  Γöé               Γöé          Γöé
  1430. Γöé          Γöé               Γöéplaces.        Γöé               Γöé          Γöé
  1431. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1432. Γöé.         Γöé.              Γöé               Γöé               Γöé          Γöé
  1433. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1434. ΓöéField n   Γöé*.FIELDNAME.n  ΓöéThe last field Γöé               Γöé          Γöé
  1435. Γöé          Γöé               Γöéin the         Γöé               Γöé          Γöé
  1436. Γöé          Γöé               Γöédatabase.  The Γöé               Γöé          Γöé
  1437. Γöé          Γöé               Γöévalue of n     Γöé               Γöé          Γöé
  1438. Γöé          Γöé               Γöéshould be equalΓöé               Γöé          Γöé
  1439. Γöé          Γöé               Γöéto the value   Γöé               Γöé          Γöé
  1440. Γöé          Γöé               Γöéspecified in   Γöé               Γöé          Γöé
  1441. Γöé          Γöé               Γöédbname.FIELDCOUΓöé               Γöé          Γöé
  1442. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1443.  
  1444. Purpose. 
  1445.  
  1446. To create a database. 
  1447.  
  1448. Format. 
  1449.  
  1450. rexxbase_createdbf('dbfname') 
  1451.  
  1452. Parameters. 
  1453.  
  1454. dbfname 
  1455.           The REXX variable contains the name of the database similar in 
  1456.           function to the database field in the Rexxbase_OpenDBF function. 
  1457.  
  1458. The name of the database is defined in a REXX variable.  You must pass the 
  1459. variable name in a string.  For example. 
  1460.  
  1461. myfilename = 'c:\xbase\newmachn.dbf'
  1462. rexxbase_createdbf('myfilename')
  1463.  
  1464. Return Value  Description 
  1465.  
  1466. ''. 
  1467.           Normal 
  1468.  
  1469. No REXX DBF Name Specified 
  1470.           The first parameter of function call is missing. 
  1471.  
  1472. Bad Variable Name 
  1473.           Variable used to pass database name is not a valid REXX variable 
  1474.           name. 
  1475.  
  1476. No Filename Assigned To Variable. 
  1477.           Variable used to pass database name is empty or unassigned. 
  1478.  
  1479. Database name Already In Use. 
  1480.           Database name passed is already in use. 
  1481.  
  1482. Create Failed 
  1483.           refer to the following: 
  1484.  
  1485.           Unknown Field Type 
  1486.  
  1487.           Use C, D, L, M, and N only for field types. 
  1488.  
  1489.           Invalid field size 
  1490.  
  1491.           For character fields use a size from 1 through 249.  For numeric 
  1492.           fields use a size of specification of xx.yy where xx is a value from 
  1493.           1 to 19 and yy is from 0 to 9 and yy is one less than xx.  All other 
  1494.           field type length specifications default to:  8 for D, 1 for L and 10 
  1495.           for M. 
  1496.  
  1497.           Too many fields. 
  1498.  
  1499.           Only 128 fields are allowed per database. 
  1500.  
  1501.           Record size too large 
  1502.  
  1503.           Records sizes are limited to 4000 bytes. 
  1504.  
  1505. To prevent unwanted destruction of a database file refer to the RexxBase 
  1506. variable Rexxbase.Safety 
  1507.  
  1508. Sample. 
  1509.  
  1510. /* REXX */
  1511. dbf.fieldcount = 4
  1512. dbf.fieldname.1 = location
  1513. dbf.location.type = 'c'
  1514. dbf.location.length = '10'
  1515. dbf.fieldname.2 = inuse
  1516. dbf.inuse.type = 'l'
  1517. dbf.fieldname.3 = startuse
  1518. dbf.startuse.type = 'd'
  1519. dbf.fieldname.4 = prchcost
  1520. dbf.prchcost.type = 'n'
  1521. dbf.prchcost.length = '9.2'
  1522. dbf = 'invntry.dbf'
  1523. ret = rexxbase_createdbf('dbf')
  1524.  
  1525.  
  1526. ΓòÉΓòÉΓòÉ 4.2.2. Rexxbase_CreateFromDBF ΓòÉΓòÉΓòÉ
  1527.  
  1528. Description.  This will create a new database file structure only.  No data is 
  1529. added to the file.  No structure modifications may be made. 
  1530.  
  1531. Purpose. 
  1532.  
  1533. To create a database structure. 
  1534.  
  1535. Format. 
  1536.  
  1537. rexxbase_createfromdbf('dbfname','newdbfname') 
  1538.  
  1539. Parameters. 
  1540.  
  1541. dbfname 
  1542.           The REXX variable contains the name of the database similar in 
  1543.           function to the database field in the Rexxbase_OpenDBF function. 
  1544. newdbfname 
  1545.           The REXX variable contains the name of the new database. 
  1546.  
  1547. The name of the database is defined in a REXX variable.  You must pass the 
  1548. variable name in a string.  For example. 
  1549.  
  1550. oldfilename = 'c:\xbase\machn.dbf'
  1551. newfilename ='c:\xbase\newmachn.dbf'
  1552. rexxbase_createfromdbf('oldfilename','newfilename')
  1553.  
  1554. Return Value  Description 
  1555.  
  1556. ''. 
  1557.           Normal 
  1558.  
  1559. No REXX DBF Name Specified 
  1560.           The first parameter of function call is missing. 
  1561.  
  1562. Unknown Database Name. 
  1563.           The name found in the passed parameter is not the same used to open 
  1564.           the database. 
  1565.  
  1566. No DBF Name To Copy Structure To 
  1567.           This functions expects a second parameter which contains the name of 
  1568.           the file to be created. 
  1569.  
  1570. Bad Variable Name 
  1571.           Variable used to pass database name is not a valid REXX variable 
  1572.           name. 
  1573.  
  1574. No Filename Assigned To Variable. 
  1575.           Variable used to pass database name is empty or unassigned. 
  1576.  
  1577. Database Name Already In Use. 
  1578.           Database name passed is already in use. 
  1579.  
  1580. CreateFrom Failed 
  1581.           Refer to the  rexxbase.error  stem variable.: 
  1582.  
  1583. To prevent unwanted destruction of a database file refer to the RexxBase 
  1584. variable Rexxbase.Safety 
  1585.  
  1586. Sample. 
  1587.  
  1588. /* REXX */
  1589. parse arg olddbf newdbf
  1590. ret = rexxbase_opendbf('olddbf')
  1591. ret = rexxbase_createfromdbf('olddbf','newdbf')
  1592.  
  1593.  
  1594. ΓòÉΓòÉΓòÉ 4.2.3. Rexxbase_ModifyDBF ΓòÉΓòÉΓòÉ
  1595.  
  1596. Description.  This will modify the structure of a database file that is 
  1597. currently open. 
  1598.  
  1599. When a database is opened the database fields descriptions are loaded into REXX 
  1600. Variables.  By changing the values in these REXX variables you can alter the 
  1601. characteristics of a database field, remove a database field and add new 
  1602. database fields. 
  1603.  
  1604. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1605. ΓöéDatabase  Γöé*.FIELDCOUNT   ΓöéThe number of  Γöé               Γöé
  1606. ΓöéField     Γöé               Γöéfields in the  Γöé               Γöé
  1607. ΓöéCount     Γöé               Γöédatabase.      Γöé               Γöé
  1608. Γöé          Γöé               ΓöéIncrease the   Γöé               Γöé
  1609. Γöé          Γöé               Γöécount of this  Γöé               Γöé
  1610. Γöé          Γöé               Γöéfield when     Γöé               Γöé
  1611. Γöé          Γöé               Γöéadding new     Γöé               Γöé
  1612. Γöé          Γöé               Γöérecords.  If   Γöé               Γöé
  1613. Γöé          Γöé               Γöéyou decrease   Γöé               Γöé
  1614. Γöé          Γöé               Γöéthe count, the Γöé               Γöé
  1615. Γöé          Γöé               Γöétrailing fieldsΓöé               Γöé
  1616. Γöé          Γöé               Γöéwill be        Γöé               Γöé
  1617. Γöé          Γöé               Γöéremoved.  To   Γöé               Γöé
  1618. Γöé          Γöé               Γöéremove fields  Γöé               Γöé
  1619. Γöé          Γöé               Γöéin the         Γöé               Γöé
  1620. Γöé          Γöé               Γöébeginning and  Γöé               Γöé
  1621. Γöé          Γöé               Γöéthe middle of  Γöé               Γöé
  1622. Γöé          Γöé               Γöéthe field      Γöé               Γöé
  1623. Γöé          Γöé               Γöéchange the     Γöé               Γöé
  1624. Γöé          Γöé               Γöéfield type 'P'.Γöé               Γöé
  1625. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1626. ΓöéField NameΓöé*.FIELDNAME.1  ΓöéThe first fieldΓöé               Γöé
  1627. Γöé1         Γöé               Γöéname.          Γöé               Γöé
  1628. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1629. Γöé*.'field  ΓöéThe first fieldΓöéSpecify C for  Γöé               Γöé
  1630. Γöéname      Γöétype.          Γöécharacter, L   Γöé               Γöé
  1631. Γöé1'.TYPE   Γöé               Γöéfor Logical, M Γöé               Γöé
  1632. Γöé          Γöé               Γöéfor Memo, N forΓöé               Γöé
  1633. Γöé          Γöé               ΓöéNumeric and D  Γöé               Γöé
  1634. Γöé          Γöé               Γöéfor date.      Γöé               Γöé
  1635. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1636. Γöé*.'field  ΓöéThe first fieldΓöéSpecify the    Γöé               Γöé
  1637. Γöéname      Γöésize or length.Γöéfield length.  Γöé               Γöé
  1638. Γöé1'.LENGTH Γöé               ΓöéFor Logical,   Γöé               Γöé
  1639. Γöé          Γöé               ΓöéMemo and Date  Γöé               Γöé
  1640. Γöé          Γöé               Γöéfield the size Γöé               Γöé
  1641. Γöé          Γöé               Γöéfield is       Γöé               Γöé
  1642. Γöé          Γöé               Γöéignored and    Γöé               Γöé
  1643. Γöé          Γöé               ΓöéRexxBase uses  Γöé               Γöé
  1644. Γöé          Γöé               Γöéthe default    Γöé               Γöé
  1645. Γöé          Γöé               Γöévalues.  For   Γöé               Γöé
  1646. Γöé          Γöé               ΓöéCharacter      Γöé               Γöé
  1647. Γöé          Γöé               Γöéfields specify Γöé               Γöé
  1648. Γöé          Γöé               Γöéa value from 1 Γöé               Γöé
  1649. Γöé          Γöé               Γöéto 254.  For   Γöé               Γöé
  1650. Γöé          Γöé               ΓöéNumeric fields Γöé               Γöé
  1651. Γöé          Γöé               Γöéspecify the    Γöé               Γöé
  1652. Γöé          Γöé               Γöélength in the  Γöé               Γöé
  1653. Γöé          Γöé               Γöéformat of      Γöé               Γöé
  1654. Γöé          Γöé               Γöélength.decimal,Γöé               Γöé
  1655. Γöé          Γöé               Γöéwhere length isΓöé               Γöé
  1656. Γöé          Γöé               Γöéa value from 1 Γöé               Γöé
  1657. Γöé          Γöé               Γöéto 19 and      Γöé               Γöé
  1658. Γöé          Γöé               Γöédecimal (no of Γöé               Γöé
  1659. Γöé          Γöé               Γöédecimal        Γöé               Γöé
  1660. Γöé          Γöé               Γöépositions) is 0Γöé               Γöé
  1661. Γöé          Γöé               Γöéto 9 (one less Γöé               Γöé
  1662. Γöé          Γöé               Γöéthan the       Γöé               Γöé
  1663. Γöé          Γöé               Γöélength).       Γöé               Γöé
  1664. Γöé          Γöé               ΓöéNumeric        Γöé               Γöé
  1665. Γöé          Γöé               Γöéaccuracy is    Γöé               Γöé
  1666. Γöé          Γöé               Γöévalid to 15    Γöé               Γöé
  1667. Γöé          Γöé               Γöéinteger digits Γöé               Γöé
  1668. Γöé          Γöé               Γöéand 9 decimal  Γöé               Γöé
  1669. Γöé          Γöé               Γöéplaces.        Γöé               Γöé
  1670. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1671. Γöé.         Γöé.              Γöé               Γöé               Γöé
  1672. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1673. ΓöéField n   Γöé*.FIELDNAME.n  ΓöéThe last field Γöé               Γöé
  1674. Γöé          Γöé               Γöéin the         Γöé               Γöé
  1675. Γöé          Γöé               Γöédatabase.  The Γöé               Γöé
  1676. Γöé          Γöé               Γöévalue of n     Γöé               Γöé
  1677. Γöé          Γöé               Γöéshould be equalΓöé               Γöé
  1678. Γöé          Γöé               Γöéto the value   Γöé               Γöé
  1679. Γöé          Γöé               Γöéspecified in   Γöé               Γöé
  1680. Γöé          Γöé               Γöédbname.FIELDCOUΓöé               Γöé
  1681. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1682.  
  1683. Purpose. 
  1684.  
  1685. To modify a database. 
  1686.  
  1687. Format. 
  1688.  
  1689. rexxbase_modifydbf('dbfname') 
  1690.  
  1691. Parameters. 
  1692.  
  1693. dbfname 
  1694.           The REXX variable contains the name of the database similar in 
  1695.           function to the database field in the Rexxbase_OpenDBF function. 
  1696.  
  1697. The name of the database is defined in a REXX variable.  You must pass the 
  1698. variable name in a string.  For example. 
  1699.  
  1700. myfilename = 'c:\xbase\machn.dbf'
  1701. rexxbase_modifydbf('myfilename')
  1702.  
  1703. Return Value  Description 
  1704.  
  1705. ''. 
  1706.           Normal 
  1707.  
  1708. No REXX DBF Name Specified 
  1709.           The first parameter of function call is missing. 
  1710.  
  1711. Unknown Database Name. 
  1712.           The name found in the passed parameter is not the same used to open 
  1713.           the database. 
  1714.  
  1715. Modify Failed 
  1716.           refer to the following: 
  1717.  
  1718.           Unknown Field Type 
  1719.  
  1720.           Use C, D, L, M, and N only for field types. 
  1721.  
  1722.           Invalid field size 
  1723.  
  1724.           For character fields use a size from 1 through 249.  For numeric 
  1725.           fields use a size of specification of xx.yy where xx is a value from 
  1726.           1 to 19 and yy is from 0 to 9 and yy is one less than xx.  All other 
  1727.           field type length specifications default to:  8 for D, 1 for L and 10 
  1728.           for M. 
  1729.  
  1730.           Too many fields. 
  1731.  
  1732.           Only 128 fields are allowed per database. 
  1733.  
  1734.           Record size too large 
  1735.  
  1736.           Records sizes are limited to 4000 bytes. 
  1737.  
  1738. Database Tied To A Join 
  1739.           The database is already in use by the RexxBase_JoinDBF function. (See 
  1740.           registered user functions.) 
  1741.  
  1742. Sample. 
  1743.  
  1744. /* REXX */
  1745. dbf = 'c:\xbase\newmachn.dbf'
  1746. rexxbase_opendbf('dbf')
  1747. dbf.fieldcount = 4
  1748. dbf.fieldname.1 = location
  1749. dbf.location.type = 'c'
  1750. dbf.location.length = '10'
  1751. dbf.fieldname.2 = inuse
  1752. dbf.inuse.type = 'l'
  1753. dbf.fieldname.3 = startuse
  1754. dbf.startuse.type = 'd'
  1755. dbf.fieldname.4 = prchcost
  1756. dbf.prchcost.type = 'n'
  1757. dbf.prchcost.length = '9.2'
  1758. ret = rexxbase_modifydbf('dbf')
  1759.  
  1760.  
  1761. ΓòÉΓòÉΓòÉ 4.3. Deleting and Packing Databases. ΓòÉΓòÉΓòÉ
  1762.  
  1763. The following function allow your REXX programs to logically delete, undelete 
  1764. and physically remove records from a database. 
  1765.  
  1766.  
  1767. ΓòÉΓòÉΓòÉ 4.3.1. Rexxbase_DeleteRecord. ΓòÉΓòÉΓòÉ
  1768.  
  1769. Description.  Marks the current record as deleted. 
  1770.  
  1771. Purpose. 
  1772.  
  1773. To logically delete a record. 
  1774.  
  1775. Format. 
  1776.  
  1777. rexxbase_deleterecord('dbfname') 
  1778.  
  1779. Parameters. 
  1780.  
  1781. dbfname 
  1782.           The REXX variable contains the name of your database as you defined 
  1783.           it in the Rexxbase_OpenDBF function. 
  1784.  
  1785. The name of the database is defined in a REXX variable.  You must pass the 
  1786. variable name in a string.  For example. 
  1787.  
  1788. ret = rexxbase_deleterecord('myfilename')
  1789.  
  1790. Return Value  Description 
  1791.  
  1792. ''. 
  1793.           Normal 
  1794.  
  1795. No REXX DBF Name Specified 
  1796.           The first parameter of function call is missing. 
  1797.  
  1798. Unknown Database Name. 
  1799.           The name found in the passed parameter is not the same used to open 
  1800.           the database. 
  1801.  
  1802. No Record Read. 
  1803.           The procedure must do a record read before deleting a record. 
  1804.  
  1805. Database Tied To A Join 
  1806.           The database is already in use by the RexxBase_JoinDBF function. (See 
  1807.           registered user functions.) 
  1808.  
  1809. Sample. 
  1810.  
  1811. /* REXX */
  1812. /*mark the last record on file as undeleted */
  1813. dbf = 'c:\users\net.dbf'
  1814. ret = rexxbase_opendbf('dbf')
  1815. if ret \= '' then do
  1816.   say ret
  1817.   exit
  1818.  end
  1819. ret = rexxbase_gotorecord('dbf',dbf.recordcount)
  1820. if ret = '' then ret = rexxbase_deleterecord('dbf')
  1821.  
  1822.  
  1823. ΓòÉΓòÉΓòÉ 4.3.2. Rexxbase_UndeleteRecord. ΓòÉΓòÉΓòÉ
  1824.  
  1825. Description.  Marks the current record as not deleted. 
  1826.  
  1827. Purpose. 
  1828.  
  1829. To logically undelete a record. 
  1830.  
  1831. Format. 
  1832.  
  1833. rexxbase_undeleterecord('dbfname') 
  1834.  
  1835. Parameters. 
  1836.  
  1837. dbfname 
  1838.           The REXX variable contains the name of your database as you defined 
  1839.           it in the Rexxbase_OpenDBF function. 
  1840.  
  1841. The name of the database is defined in a REXX variable.  You must pass the 
  1842. variable name in a string.  For example. 
  1843.  
  1844. rexxbase_undeleterecord('myfilename')
  1845.  
  1846. Return Value  Description 
  1847.  
  1848. ''. 
  1849.           Normal 
  1850.  
  1851. No REXX DBF Name Specified 
  1852.           The first parameter of function call is missing. 
  1853.  
  1854. Unknown Database Name. 
  1855.           The name found in the passed parameter is not the same used to open 
  1856.           the database. 
  1857.  
  1858. No Record Read. 
  1859.           The procedure must do a record read before undeleting a record. 
  1860.  
  1861. Database Tied To A Join 
  1862.           The database is already in use by the RexxBase_JoinDBF function. (See 
  1863.           registered user functions.) 
  1864.  
  1865. Sample. 
  1866.  
  1867. /* REXX */
  1868. /*mark the last record on file as not deleted */
  1869. dbf = 'c:\users\net.dbf'
  1870. ret = rexxbase_opendbf('dbf')
  1871. if ret \= '' then do
  1872.   say ret
  1873.   exit
  1874.  end
  1875. ret =rexxbase_gotorecord('dbf',dbf.recordcount)
  1876. if ret = '' then ret = rexxbase_undeleterecord('dbf')
  1877.  
  1878.  
  1879. ΓòÉΓòÉΓòÉ 4.3.3. Rexxbase_PackDBF. ΓòÉΓòÉΓòÉ
  1880.  
  1881. Description.  This function removes logically deleted records from the 
  1882. database. 
  1883.  
  1884. Purpose. 
  1885.  
  1886. To remove deleted records.  If the file has been opened with indexes, then the 
  1887. index will be rebuilt. 
  1888.  
  1889. If the database has associated index files and they are not opened during the 
  1890. packing process the indexes will be incorrect. 
  1891.  
  1892. Format. 
  1893.  
  1894. rexxbase_packdbf('dbfname') 
  1895.  
  1896. Parameters. 
  1897.  
  1898. dbfname 
  1899.           The REXX variable contains the name of your database as you defined 
  1900.           it in the Rexxbase_OpenDBF function. 
  1901.  
  1902. The name of the database is defined in a REXX variable.  You must pass the 
  1903. variable name in a string.  For example. 
  1904.  
  1905. myfilename = 'c:\xbase\machines.dbf'
  1906. ret = rexxbase_packdbf('myfilename')
  1907.  
  1908. Return Value  Description 
  1909.  
  1910. ''. 
  1911.           Normal 
  1912.  
  1913. No REXX DBF Name Specified 
  1914.           No argument was passed to the routine. 
  1915.  
  1916. Unknown Database Name. 
  1917.           The name found in the passed parameter is not the same used to open 
  1918.           the database. 
  1919.  
  1920. Database Tied To A Join 
  1921.           The database is already in use by the RexxBase_JoinDBF function. (See 
  1922.           registered user functions.) 
  1923.  
  1924. Record With Duplicate Key Not Updated 
  1925.           The control variable RexxBase.AllowDuplicatesIndexes has been set to 
  1926.           NO.  A  matching index has been found.  Therefore, the record was 
  1927.           written to the DBF file.  Remember, deleted records do not have their 
  1928.           index entries removed until the database has been packed.  Also, do 
  1929.           not confuse this with the control variable RexxBase.Unique, which 
  1930.           allows all records to be written to the database but prevents a 
  1931.           duplicate index entry from being created. See 
  1932.           Rexxbase.AllowDuplicateIndexes. 
  1933.  
  1934. Sample. 
  1935.  
  1936. /* REXX */
  1937. dbf = 'c:\users\net.dbf'
  1938. ret = rexxbase_opendbf('dbf')
  1939. if ret \= '' then do
  1940.   say ret
  1941.   exit
  1942.  end
  1943. ret = rexxbase_packdbf('dbf')
  1944.  
  1945.  
  1946. ΓòÉΓòÉΓòÉ 4.4. Index and Tag Functions ΓòÉΓòÉΓòÉ
  1947.  
  1948. The following functions allow you to access your database through indexes and 
  1949. to control the index files. 
  1950.  
  1951.  
  1952. ΓòÉΓòÉΓòÉ 4.4.1. Rexxbase_FindRecord. ΓòÉΓòÉΓòÉ
  1953.  
  1954. Description.  The command will position at a specified record using the master 
  1955. index file. 
  1956.  
  1957. Purpose. 
  1958.  
  1959. To read a particular record in the database using the index file. 
  1960.  
  1961. Format. 
  1962.  
  1963. rexxbase_findrecord('dbfname','string',[EXACT]) 
  1964.  
  1965. Parameters. 
  1966.  
  1967. dbfname 
  1968.           The REXX variable contains the name of your database as you defined 
  1969.           it in the Rexxbase_OpenDBF function. 
  1970. string 
  1971.           The index key string used for searching. 
  1972. EXACT 
  1973.           Optional indicator to tell RexxBase to find the exact 'string' in the 
  1974.           index.  This would cause a Hard Find.  If not specified then RexxBase 
  1975.           would execute a Soft Find. 
  1976.  
  1977. This function can avoid reading deleted records by setting 
  1978. Rexxbase.SkipDeleted. 
  1979.  
  1980. The name of the database is defined in a REXX variable.  You must pass the 
  1981. variable name in a string.  For example. 
  1982.  
  1983. myfilename = 'c:\xbase\machines.dbf'
  1984. ret = rexxbase_findrecord('myfilename','LASER 11')
  1985.  
  1986. Return Value  Description 
  1987.  
  1988. ''. 
  1989.           Normal 
  1990.  
  1991. No REXX DBF Name 
  1992.           No argument was passed to the routine. 
  1993.  
  1994. No Locate String Specified 
  1995.           Second parameter of function is missing. 
  1996.  
  1997. Unknown Database Name. 
  1998.           The name found in the passed parameter is not the same used to open 
  1999.           the database. 
  2000.  
  2001. Index File Not Opened Or Tag Set 
  2002.           When the database was opened, no index files were specified and no 
  2003.           TAG= parameter was specified. 
  2004.  
  2005. Record Not Found (when EXACT is specified) 
  2006.           You passed a string that is not on the master index.  No record is 
  2007.           read. 
  2008.  
  2009. Record Not Found (when EXACT is not specified) 
  2010.           The string entered is higher than any on the index. 
  2011.  
  2012. Internal File Processing Error. 
  2013.           Record area could not be read. Find the XX error code in the 
  2014.           rexxbase.error  stem variable. Where XX is a return code from OS/2. 
  2015.           If XX is equal to 5 then the operating system is denying access to 
  2016.           that area.  If XX is equal to 33 then the record area has been 
  2017.           locked.  For other values you can type on the command line 'HELP XX' 
  2018.           to find the values for XX. 
  2019.  
  2020. Database Tied To A Join 
  2021.           The database is already in use by the RexxBase_JoinDBF function. (See 
  2022.           registered user functions.) 
  2023.  
  2024. Sample. 
  2025.  
  2026. /* REXX */
  2027. /* this example copies the finds a record on the database */
  2028. dbf = 'c:\users\net.dbf'
  2029. ndx = 'c:\xbase\net.ndx'
  2030. ret = rexxbase_opendbf('dbf',ndx)
  2031. if ret \= '' then do
  2032.   say ret
  2033.   exit
  2034.  end
  2035. ret = rexxbase_findrecord('dbf','USA001')
  2036. if ret \= '' then do
  2037.   say find failed with ret
  2038.   exit
  2039.  end
  2040. say Network Disposition For USA001 is dbf.dispo
  2041. ret = rexxbase_closedbf('dbf')
  2042. if ret \  = '' then do
  2043.   say close failed with ret
  2044.   exit
  2045.  end
  2046.  
  2047. If you must have reverse indexes, open the database with the intended index, 
  2048. find the record to start at and readprev until TOF. 
  2049.  
  2050.  
  2051. ΓòÉΓòÉΓòÉ 4.4.2. Rexxbase_SetIndexTagName. ΓòÉΓòÉΓòÉ
  2052.  
  2053. Description.  The function provides an alternate method to specify which tag to 
  2054. use when finding records through a MDX files. 
  2055.  
  2056. Purpose. 
  2057.  
  2058. To specify which tag name to use in an MDX file. 
  2059.  
  2060. Format. 
  2061.  
  2062. rexxbase_setindextagname('dbfname','tagname') 
  2063.  
  2064. Parameters. 
  2065.  
  2066. dbfname 
  2067.           The REXX variable contains the name of your database as you defined 
  2068.           it in the Rexxbase_OpenDBF function. 
  2069. tagname 
  2070.           The name of a known tag in the associated MDX file. 
  2071.  
  2072. The name of the database is defined in a REXX variable.  You must pass the 
  2073. variable name in a string.  For example. 
  2074.  
  2075. myfilename = 'c:\xbase\machines.dbf'
  2076. ret = rexxbase_setindextagname('myfilename','location')
  2077.  
  2078. Return Value  Description 
  2079.  
  2080. ''. 
  2081.           Normal 
  2082.  
  2083. No REXX DBF Name 
  2084.           No argument was passed to the routine. 
  2085.  
  2086. No Index Tag Name Specified 
  2087.           Second parameter of function is missing. 
  2088.  
  2089. Unknown Database Name. 
  2090.           The name found in the passed parameter is not the same used to open 
  2091.           the database. 
  2092.  
  2093. No Index Tag File Opened 
  2094.           The database file does not have an associated MDX file. 
  2095.  
  2096. Primary Index Not MDX Type 
  2097.           Your program has made the primary index file an NDX file. 
  2098.  
  2099. Tag Index File Has No Tags 
  2100.           No tag has been assigned to the MDX file. 
  2101.  
  2102. Index Tag Name Not Found 
  2103.           The tag name has not been defined in the MDX file. 
  2104.  
  2105. Sample. 
  2106.  
  2107. /* REXX */
  2108. /* this example copies the finds a record on the database */
  2109. dbf = 'c:\users\net.dbf'
  2110. ret = rexxbase_opendbf('dbf')
  2111. if ret \= '' then do
  2112.   say ret
  2113.   exit
  2114.  end
  2115. ret = rexxbase_setindextagname('dbf','NETWORKS')
  2116. if ret \= '' then do
  2117.   say find failed with ret
  2118.   exit
  2119.  end
  2120. ret = rexxbase_findrecord('dbf','USA001')
  2121. if ret \= '' then do
  2122.   say find failed with ret
  2123.   exit
  2124.  end
  2125. say Network Disposition For USA001 is dbf.dispo
  2126. ret = rexxbase_closedbf('dbf')
  2127. if ret \  = '' then do
  2128.   say close failed with ret
  2129.   exit
  2130.  end
  2131.  
  2132.  
  2133. ΓòÉΓòÉΓòÉ 4.4.3. Rexxbase_CreateIndex ΓòÉΓòÉΓòÉ
  2134.  
  2135. Description.  This will create an index for an currently open database. 
  2136.  
  2137. The call to the RexxBase Create Index function requires 3 parameters:  Open 
  2138. Database Name, Index file name (FAT or HPFS format) and the string defining the 
  2139. index.  RexxBase does not verify nor add the NDX file extension.  It is 
  2140. recommended that your program specifies it. 
  2141.  
  2142. Purpose. 
  2143.  
  2144. To create an index for an open database. 
  2145.  
  2146. Format. 
  2147.  
  2148. rexxbase_createindex('dbfname',index file name,index string) 
  2149.  
  2150. Parameters. 
  2151.  
  2152. dbfname 
  2153.           The REXX variable contains the name of the database similar in 
  2154.           function to the database field in the Rexxbase_OpenDBF function. 
  2155. index file name 
  2156.           Any valid file name in FAT or HPFS format. 
  2157. index string 
  2158.           A string of characters used to specify the index. 
  2159.  
  2160. See REXXBASE.UNIQUE more information. 
  2161.  
  2162. See ndx definition more information. 
  2163.  
  2164. The name of the database is defined in a REXX variable.  You must pass the 
  2165. variable name in a string.  For example. 
  2166.  
  2167. myfilename = 'c:\xbase\newmachn.dbf'
  2168. myindexname = 'c:\xbase\newmachn.ndx'
  2169. rexxbase_opendbf('myfilename')
  2170. rexxbase_createindex('myfilename',myindexname,'num+dept')
  2171.  
  2172. Return Value  Description 
  2173.  
  2174. ''. 
  2175.           Normal 
  2176.  
  2177. No REXX DBF Name Specified 
  2178.           No argument was passed to the routine. 
  2179.  
  2180. Unknown Database Name. 
  2181.           The name found in the passed parameter is not the same used to open 
  2182.           the database. 
  2183.  
  2184. No Index File Name Specified 
  2185.           This procedure expects a second argument containing the new index 
  2186.           file name. 
  2187.  
  2188. No Index Field Names Specified 
  2189.           This procedure expects a third argument containing the index key. 
  2190.  
  2191. Index Not Built. 
  2192.           A runtime error occurred.  Review error message in  rexxbase.error 
  2193.           stem variable. 
  2194.  
  2195. Unknown Field Type 
  2196.           Use C, D, L, M, and N only for field types. 
  2197.  
  2198. Invalid Index Size 
  2199.           Indexes are limited to 100 bytes. 
  2200.  
  2201. Too Many Fields. 
  2202.           Only 100 fields are allowed per index. 
  2203.  
  2204. Data Type Mismatch 
  2205.           You can't mix numeric, character or date fields together 
  2206.  
  2207. Invalid Data Type 
  2208.           Memo fields and logic fields are not allowed to be used as indexes. 
  2209.  
  2210. Database Tied To A Join 
  2211.           The database is already in use by the RexxBase_JoinDBF function. (See 
  2212.           registered user functions.) 
  2213.  
  2214. Sample. 
  2215.  
  2216. /* REXX */
  2217. dbf = 'c:\xbase\machn.dbf'
  2218. ret = rexxbase_opendbf('dbf')
  2219. ret = rexxbase_createindex('dbf','machn.ndx','machnum')
  2220. ret = rexxbase_closedbf('dbf')
  2221.  
  2222.  
  2223. ΓòÉΓòÉΓòÉ 4.4.4. Rexxbase_CreateMultipleIndexFile ΓòÉΓòÉΓòÉ
  2224.  
  2225. Description.  This will create a multiple index for a currently open database. 
  2226.  
  2227. The call to the RexxBase Create Multiple Index File function requires 2 
  2228. parameters:  Open Database Name and an index file name (FAT or HPFS format). 
  2229. RexxBase does not verify nor add the MDX file extension.  It is recommended 
  2230. that your program specifies it. 
  2231.  
  2232. If the file was created with the RexxBase.dBaseFileType set to 'dbase4' a MDX 
  2233. file is created. 
  2234.  
  2235. This function does not create tags.  To add an index tag use 
  2236. RexxBase_AddTagToIndex function. 
  2237.  
  2238. Purpose. 
  2239.  
  2240. To create a multiple index file for an open database. 
  2241.  
  2242. Format. 
  2243.  
  2244. rexxbase_createmultipleindexfile('dbfname',index file name) 
  2245.  
  2246. Parameters. 
  2247.  
  2248. dbfname 
  2249.           The REXX variable contains the name of the database similar in 
  2250.           function to the database field in the Rexxbase_OpenDBF function. 
  2251. index file name 
  2252.           Any valid file name in FAT or HPFS format. 
  2253.  
  2254. See REXXBASE.UNIQUE more information. 
  2255.  
  2256. See MDX definition more information. 
  2257.  
  2258. The name of the database is defined in a REXX variable.  You must pass the 
  2259. variable name in a string.  For example. 
  2260.  
  2261. myfilename = 'c:\xbase\newmachn.dbf'
  2262. myindexname = 'c:\xbase\newmachn.mdx'
  2263. rexxbase_opendbf('myfilename')
  2264. rexxbase_createmultipleindexfile('myfilename',myindexname)
  2265.  
  2266. Return Value  Description 
  2267.  
  2268. ''. 
  2269.           Normal 
  2270.  
  2271. No REXX DBF Name Specified 
  2272.           No argument was passed to the routine. 
  2273.  
  2274. Unknown Database Name. 
  2275.           The name found in the passed parameter is not the same used to open 
  2276.           the database. 
  2277.  
  2278. No Index File Name Specified 
  2279.           This procedure expects a second argument containing the new index 
  2280.           file name. 
  2281.  
  2282. Create Index File Failed. 
  2283.           A runtime error occurred.  Review error message in  rexxbase.error 
  2284.           stem variable. 
  2285.  
  2286. Database Tied To A Join 
  2287.           The database is already in use by the RexxBase_JoinDBF function. (See 
  2288.           registered user functions.) 
  2289.  
  2290. Sample. 
  2291.  
  2292. /* REXX */
  2293. dbf = 'c:\xbase\machn.dbf'
  2294. ret = rexxbase_opendbf('dbf')
  2295. ret = rexxbase_createmultipleindexfile('dbf','machn.mdx')
  2296. ret = rexxbase_addtagtoindex('dbf','machnum')
  2297. ret = rexxbase_closedbf('dbf')
  2298.  
  2299.  
  2300. ΓòÉΓòÉΓòÉ 4.4.5. Rexxbase_AddTagToIndex ΓòÉΓòÉΓòÉ
  2301.  
  2302. Description.  This will add a tag index to a currently open database and MDX 
  2303. file. 
  2304.  
  2305. The call to the RexxBase Add Tag To Index function requires 3 parameters:  Open 
  2306. Database Name, tag name and the string defining the index. 
  2307.  
  2308. Purpose. 
  2309.  
  2310. To create an index tag. 
  2311.  
  2312. Format. 
  2313.  
  2314. rexxbase_addtagtoindex('dbfname',index tag name,index string) 
  2315.  
  2316. Parameters. 
  2317.  
  2318. dbfname 
  2319.           The REXX variable contains the name of the database similar in 
  2320.           function to the database field in the Rexxbase_OpenDBF function. 
  2321. index tag name 
  2322.           Any valid field name.  Follow the field name conventions. 
  2323. index string 
  2324.           A string of characters used to specify the index. 
  2325.  
  2326. See REXXBASE.UNIQUE more information. 
  2327.  
  2328. See MDX definition more information. 
  2329.  
  2330. The name of the database is defined in a REXX variable. You must pass the tag 
  2331. and variable name in a string.  For example. 
  2332.  
  2333. myfilename = 'c:\xbase\newmachn.dbf'
  2334. /* assumes there is an associated MDX file newmachn.mdx */
  2335. rexxbase_opendbf('myfilename')
  2336. rexxbase_addtagtoindex('myfilename','Num_Dept','num+dept')
  2337.  
  2338. Return Value  Description 
  2339.  
  2340. ''. 
  2341.           Normal 
  2342.  
  2343. No REXX DBF Name Specified 
  2344.           No argument was passed to the routine. 
  2345.  
  2346. Unknown Database Name. 
  2347.           The name found in the passed parameter is not the same used to open 
  2348.           the database. 
  2349.  
  2350. No Tag Name Specified 
  2351.           This procedure expects a second argument containing the new tag name. 
  2352.  
  2353. No Tag Index Field Specified 
  2354.           This procedure expects a third argument containing the index key. 
  2355.  
  2356. Tag Index File Not Opened 
  2357.           The DBF file does not have an associated MDX file that was opened 
  2358.           when the DBF was opened. 
  2359.  
  2360. Failed To Add Tag To Index 
  2361.           A runtime error occurred.  Review error message in  rexxbase.error 
  2362.           stem variable. 
  2363.  
  2364. Unknown Field Type 
  2365.           Use C, D, L, M, and N only for field types. 
  2366.  
  2367. Invalid Index Size 
  2368.           Indexes are limited to 100 bytes. 
  2369.  
  2370. Too Many Fields. 
  2371.           Only 100 fields are allowed per index. 
  2372.  
  2373. Data Type Mismatch 
  2374.           You can't mix numeric, character or date fields together 
  2375.  
  2376. Invalid Data Type 
  2377.           Memo fields and logic fields are not allowed to be used as indexes. 
  2378.  
  2379. Index Tag Name Too Long 
  2380.           The second parameter is invalid.  See above. 
  2381.  
  2382. Primary Index File Not MDX format. 
  2383.           The primary index file must be the MDX file. 
  2384.  
  2385. Database Tied To A Join 
  2386.           The database is already in use by the RexxBase_JoinDBF function. (See 
  2387.           registered user functions.) 
  2388.  
  2389. Sample. 
  2390.  
  2391. /* REXX */
  2392. dbf = 'c:\xbase\machn.dbf'
  2393. /* assume machn.mdx exists */
  2394. ret = rexxbase_opendbf('dbf')
  2395. ret = rexxbase_addtagtoindex('dbf','machnum','machnum')
  2396. ret = rexxbase_closedbf('dbf')
  2397.  
  2398.  
  2399. ΓòÉΓòÉΓòÉ 4.4.6. Rexxbase_DropTagFromIndex ΓòÉΓòÉΓòÉ
  2400.  
  2401. Description.  This will remove a tag index from a currently open database and 
  2402. MDX file. 
  2403.  
  2404. The call to the RexxBase Drop Tag From  Index function requires 2 parameters: 
  2405. Open Database Name and tag name. 
  2406.  
  2407. Purpose. 
  2408.  
  2409. To drop an index tag. 
  2410.  
  2411. Format. 
  2412.  
  2413. rexxbase_droptagfromindex('dbfname',index tag name) 
  2414.  
  2415. Parameters. 
  2416.  
  2417. dbfname 
  2418.           The REXX variable contains the name of the database similar in 
  2419.           function to the database field in the Rexxbase_OpenDBF function. 
  2420. index tag name 
  2421.           An existing tag field name. 
  2422.  
  2423. The name of the database is defined in a REXX variable. You must pass the tag 
  2424. and variable name in a string.  For example. 
  2425.  
  2426. myfilename = 'c:\xbase\newmachn.dbf'
  2427. /* assumes there is an associated MDX file newmachn.mdx */
  2428. rexxbase_opendbf('myfilename')
  2429. rexxbase_droptagfromindex('myfilename','Num_Dept')
  2430.  
  2431. Return Value  Description 
  2432.  
  2433. ''. 
  2434.           Normal 
  2435.  
  2436. No REXX DBF Name Specified 
  2437.           No argument was passed to the routine. 
  2438.  
  2439. Unknown Database Name. 
  2440.           The name found in the passed parameter is not the same used to open 
  2441.           the database. 
  2442.  
  2443. No Tag Name Specified 
  2444.           The second argument contains the tag name to be dropped. 
  2445.  
  2446. Tag Index File Not Opened 
  2447.           The DBF file does not have an associated MDX file that was opened 
  2448.           when the DBF was opened. 
  2449.  
  2450. Primary Index File Not MDX format. 
  2451.           The primary index file must be the MDX file. 
  2452.  
  2453. Database Tied To A Join 
  2454.           The database is already in use by the RexxBase_JoinDBF function. (See 
  2455.           registered user functions.) 
  2456.  
  2457. Failed To Drop Tag From Index 
  2458.           A runtime error occurred.  Review error message in  rexxbase.error 
  2459.           stem variable. 
  2460.  
  2461. Sample. 
  2462.  
  2463. /* REXX */
  2464. dbf = 'c:\xbase\machn.dbf'
  2465. /* assume machn.mdx exists */
  2466. ret = rexxbase_opendbf('dbf')
  2467. ret = rexxbase_droptagfromindex('dbf','machnum','machnum')
  2468. ret = rexxbase_closedbf('dbf')
  2469.  
  2470.  
  2471. ΓòÉΓòÉΓòÉ 4.4.7. Rexxbase_ReindexDBF ΓòÉΓòÉΓòÉ
  2472.  
  2473. Purpose. 
  2474.  
  2475. To rebuild all open indexes for an open database. 
  2476.  
  2477. Format. 
  2478.  
  2479. ret = rexxbase_reindexdbf(dbfname)
  2480.  
  2481. Parameters. 
  2482.  
  2483. dbfname 
  2484.           The REXX variable contains the name of the database similar in 
  2485.           function to the database field in the Rexxbase_OpenDBF function. 
  2486.  
  2487. Description.  This will rebuild all the indexes that are opened for a database 
  2488. file. 
  2489.  
  2490. When a database has been changed without its associated indexes opened, the 
  2491. index pointers will be incorrect.  This function will rebuild all indexes for 
  2492. the file. 
  2493.  
  2494. Also, use this function when many updates have been applied to a database, even 
  2495. with the index opened.  This will maintain the indexes for efficiency. 
  2496.  
  2497. myfilename = 'c:\xbase\machn.dbf'
  2498. myndxname = 'c:\xbase\machn.ndxf'
  2499. rexxbase_reindexdbf('myfilename',myndxname)
  2500.  
  2501. Return Value  Description 
  2502.  
  2503. ''. 
  2504.           Normal 
  2505.  
  2506. No REXX DBF Name Specified 
  2507.           No argument was passed to the routine. 
  2508.  
  2509. Unknown Database Name. 
  2510.           The name found in the passed parameter is not the same used to open 
  2511.           the database. 
  2512.  
  2513. Database Tied To A Join 
  2514.           The database is already in use by the RexxBase_JoinDBF function. (See 
  2515.           registered user functions.) 
  2516.  
  2517. Sample. 
  2518.  
  2519. /* REXX */
  2520. dbf = 'c:\xbase\newmachn.dbf'
  2521. rexxbase_opendbf('dbf','c:\xbase\newmachn.ndx')
  2522. ret = rexxbase_reindexdbf('dbf')
  2523. say  newmachn.mdx has been rebuilt
  2524. say  newmachn.ndx has been rebuilt
  2525. ret = rexxbase_closedbf('dbf')
  2526.  
  2527.  
  2528. ΓòÉΓòÉΓòÉ 4.5. Database Sorting. ΓòÉΓòÉΓòÉ
  2529.  
  2530.  
  2531. ΓòÉΓòÉΓòÉ 4.5.1. Rexxbase_SortDBF ΓòÉΓòÉΓòÉ
  2532.  
  2533. Description.  This will sort a database file by fields names and create a new 
  2534. database file. 
  2535.  
  2536. Prior to calling the RexxBase Sort function you must specify the sort fields 
  2537. and the sort order for each field.  You do this by creating field names using 
  2538. the database variable name concatenated with the SORTFIELD string. 
  2539.  
  2540. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2541. ΓöéSort FieldΓöé*.SORTFIELD.0  ΓöéThe number of  Γöé               Γöé          Γöé
  2542. ΓöéCount     Γöé               Γöéfields to be   Γöé               Γöé          Γöé
  2543. Γöé          Γöé               Γöéused for sort  Γöé               Γöé          Γöé
  2544. Γöé          Γöé               Γöécriteria.      Γöé               Γöé          Γöé
  2545. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2546. ΓöéSort FieldΓöé*.SORTFIELD.1  ΓöéThe primary    Γöé*.SORTTYPE.1   ΓöéUse a     Γöé
  2547. ΓöéName 1    Γöé               Γöésort field.    Γöé               Γöévalue of  Γöé
  2548. Γöé          Γöé               Γöé               Γöé               Γöé'-' (minusΓöé
  2549. Γöé          Γöé               Γöé               Γöé               Γöésign) to  Γöé
  2550. Γöé          Γöé               Γöé               Γöé               Γöésort this Γöé
  2551. Γöé          Γöé               Γöé               Γöé               Γöéfield in  Γöé
  2552. Γöé          Γöé               Γöé               Γöé               ΓöédescendingΓöé
  2553. Γöé          Γöé               Γöé               Γöé               Γöéorder.    Γöé
  2554. Γöé          Γöé               Γöé               Γöé               ΓöéAny other Γöé
  2555. Γöé          Γöé               Γöé               Γöé               Γöévalue willΓöé
  2556. Γöé          Γöé               Γöé               Γöé               Γöésort the  Γöé
  2557. Γöé          Γöé               Γöé               Γöé               Γöéfield in  Γöé
  2558. Γöé          Γöé               Γöé               Γöé               Γöéascending Γöé
  2559. Γöé          Γöé               Γöé               Γöé               Γöéorder.    Γöé
  2560. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2561. Γöé.         Γöé.              Γöé               Γöé               Γöé          Γöé
  2562. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2563. ΓöéSort FieldΓöé*.SORTFIELD.n  ΓöéThe last sort  Γöé               Γöé          Γöé
  2564. Γöén         Γöé               Γöéfield in       Γöé               Γöé          Γöé
  2565. Γöé          Γöé               Γöépriority.  The Γöé               Γöé          Γöé
  2566. Γöé          Γöé               Γöévalue of n     Γöé               Γöé          Γöé
  2567. Γöé          Γöé               Γöéshould be equalΓöé               Γöé          Γöé
  2568. Γöé          Γöé               Γöéto the value   Γöé               Γöé          Γöé
  2569. Γöé          Γöé               Γöéspecified in   Γöé               Γöé          Γöé
  2570. Γöé          Γöé               Γöédbname.SORTFIELΓöé               Γöé          Γöé
  2571. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2572.  
  2573. Purpose. 
  2574.  
  2575. To sort a database. 
  2576.  
  2577. Format. 
  2578.  
  2579. rexxbase_sortdbf('dbfname',sortfilename) 
  2580.  
  2581. Parameters. 
  2582.  
  2583. dbfname 
  2584.           The REXX variable contains the name of your database as you defined 
  2585.           it in the Rexxbase_OpenDBF function. 
  2586. sortfilename 
  2587.           The sorted output file name as it will be known to the operating 
  2588.           system. 
  2589.  
  2590. This function can skip deleted records by setting Rexxbase.SkipDeleted. 
  2591.  
  2592. The name of the database is defined in a REXX variable.  You must pass the 
  2593. variable name in a string.  For example. 
  2594.  
  2595. myfilename = 'c:\xbase\machines.dbf' ret =
  2596. rexxbase_sortdbf('myfilename','c:\xbase\machsort.dbf')
  2597.  
  2598. Return Value  Description 
  2599.  
  2600. ''. 
  2601.           Normal 
  2602.  
  2603. No REXX DBF Name Specified 
  2604.           The first parameter of function call is missing. 
  2605.  
  2606. No Sort DBF Name Specified 
  2607.           The second parameter of function call is missing. 
  2608.  
  2609. Unknown Database Name. 
  2610.           The name found in the passed parameter is not the same used to open 
  2611.           the database. 
  2612.  
  2613. Sort Field Count Not Found 
  2614.           The REXX variable containing the field count is missing.  See 
  2615.           *.SORTFIELD.0 above. 
  2616.  
  2617. Can't Find 'fieldname' 
  2618.           The field name used by the SORTFIELD stem variables are not part of 
  2619.           this database. 
  2620.  
  2621. Not Enough Memory For Summarizing or Sorting 
  2622.           RexxBase uses the physical and virtual address space to perform the 
  2623.           sort.  The database to be sorted is too large for this process. 
  2624.  
  2625. Can't Open Sort DBF File. 
  2626.           OS/2 returned a error code that indicates some type of error has 
  2627.           occurred while opening the output database. 
  2628.  
  2629. Can't Write To Sort DBF File. 
  2630.           OS/2 returned a error code that indicates some type of error has 
  2631.           occurred while writing the output database. 
  2632.  
  2633. Unable To Write Fields To File. 
  2634.           OS/2 returned a error code that indicates some type of error has 
  2635.           occurred while writing the output database. 
  2636.  
  2637. Internal File Processing Area 
  2638.           Record area could not be read. Find the XX error code in the 
  2639.           rexxbase.error  stem variable. Where XX is a return code from OS/2. 
  2640.           If XX is equal to 5 then the operating system is denying access to 
  2641.           that area.  If XX is equal to 33 then the record area has been 
  2642.           locked.  For other values you can type on the command line 'HELP XX' 
  2643.           to find the values for XX. 
  2644.  
  2645. Record Locked 
  2646.           The file has been locked by another process. 
  2647.  
  2648. Sample. 
  2649.  
  2650. /* REXX */
  2651. /* sort on field name location (descending)*/
  2652. dbf = 'c:\users\net.dbf'
  2653. ret = rexxbase_opendbf('dbf')
  2654. if ret \= '' then do
  2655.   say ret
  2656.   exit
  2657.  end
  2658. dbf.sortfield.0 = 1
  2659. dbf.sortfield.1 = location
  2660. dbf.sorttype.1 = '-'
  2661. ret = rexxbase_sortdbf('dbf','c:\users\sortloc.dbf')
  2662.  
  2663.  NOTE: 
  2664.  
  2665. MEMO fields for the original file are valid with the SORTED file.  BUT these 
  2666. MEMO fields can be corrupted with either file changes or adds a MEMO field. 
  2667. THEREFORE, if you want to use the DBT (MEMO file) with the sorted file, you 
  2668. should copy the DBT file using the SORTED file name. 
  2669.  
  2670.  dbf = 'presort.dbf'
  2671.  call rexxbase_opendbf 'dbf'
  2672.  call rexxbase_sortdbf 'dbf' 'sorted.dbf'
  2673.  'COPY presort.dbt sorted.dbt'
  2674.  sdbf = 'sorted.dbf'
  2675.  call rexxbase_opendbf 'sdbf'
  2676.  
  2677.  
  2678. ΓòÉΓòÉΓòÉ 4.6. Registered User Functions. ΓòÉΓòÉΓòÉ
  2679.  
  2680.  The following functions are available with the registered user package: 
  2681.  
  2682. o Rexxbase_ReadAndLockDBF 
  2683.  
  2684. o Rexxbase_ReadAndLockPrevDBF 
  2685.  
  2686. o Rexxbase_GoToAndLockRecord 
  2687.  
  2688. o Rexxbase_FindAndLockRecord 
  2689.  
  2690. o Rexxbase_WriteDBFWithLock 
  2691.  
  2692. o Rexxbase_LockDBF 
  2693.  
  2694. o Rexxbase_UnlockDBF 
  2695.  
  2696. o Rexxbase_SetLockTimeout 
  2697.  
  2698. o Rexxbase_ExportDBF 
  2699.  
  2700. o Rexxbase_ImportDBF 
  2701.  
  2702. o Rexxbase_FormatDate 
  2703.  
  2704. o Rexxbase_InternalDate 
  2705.  
  2706. o Rexxbase_DaysDifference 
  2707.  
  2708. o Rexxbase_DateCalc 
  2709.  
  2710. o Rexxbase_DayOfWeek 
  2711.  
  2712. o Rexxbase_FilterDBF 
  2713.  
  2714. o Rexxbase_ScanForRecord 
  2715.  
  2716. o Rexxbase_JoinDBF 
  2717.  
  2718. o Rexxbase_SummarizeDBF 
  2719.  
  2720. o Rexxbase_ChangePrimaryIndex 
  2721.  
  2722. o Rexxbase_Soundex 
  2723.  
  2724.  
  2725. ΓòÉΓòÉΓòÉ 5. RexxBase Fields and Database Fields. ΓòÉΓòÉΓòÉ
  2726.  
  2727. RexxBase uses REXX Stem and Compound variables extensively to allow your 
  2728. procedure to use your database files. 
  2729.  
  2730.  
  2731. ΓòÉΓòÉΓòÉ 5.1. RexxBase Fields. ΓòÉΓòÉΓòÉ
  2732.  
  2733. RexxBase PROVIDES several fields for controlling your database.  All field 
  2734. names are associated with your database by using the stem variable name you 
  2735. pass to the RexxBase Functions. 
  2736.  
  2737. Also, RexxBase provides a stem variable for system errors.  The field name is 
  2738. rexxbase.error .  Refer to the section on error processing for more information 
  2739. and a list of potential error messages. 
  2740.  
  2741. Name      Description. 
  2742. "database name".RECORDCOUNT 
  2743.           Number of record on the file.  Where database name is the name your 
  2744.           program passes to RexxBase. 
  2745. "database name".DBASEFILEFORMAT 
  2746.           A value of dBase3 or dBase4. The format of the DBF based on internal 
  2747.           indicators.  NOTE: without using MDX files or MEMO fields, the format 
  2748.           defaults to dBase3. 
  2749. "database name".RECORDNUMBER 
  2750.           The current record number.  Where database name is the name your 
  2751.           program passes to RexxBase. 
  2752. "database name".FILESTATUS 
  2753.           TOF - Top of file, BOF - End of file, or null. 
  2754. "database name".RECORDSTATUS 
  2755.           DELETED - current record is deleted, or null. 
  2756. "database name".LASTUPDATE 
  2757.           Last day file was updated. 
  2758. "database name".FIELDCOUNT 
  2759.           Number of fields on the database. 
  2760. database name".FIELDNAME.# 
  2761.           Field names on the database.  Where # is any number from 1 to the 
  2762.           number of fields as specified in FIELDCOUNT. 
  2763. "database name"."fieldname".TYPE 
  2764.           The database type for the respective field, see FIELDNAME.#. 
  2765.           "fieldname" is the name of the field in the database. 
  2766. "database name"."fieldname".LENGTH 
  2767.           The length of the respective field, see FIELDNAME.#.  "fieldname" is 
  2768.           the name of the field in the database.  Numeric fields will have in 
  2769.           the value in the format of xx.yy where xx is the length of the field 
  2770.           and yy is the number of decimal positions.  Memo fields are always 
  2771.           10.  Logical fields are always 1. 
  2772. "database name".INDEXCOUNT 
  2773.           Number of index files open for the database. 
  2774. "database name".INDEXFILETYPE.# 
  2775.           Returns either NDX or MDX. Where # is any number from 1 to the number 
  2776.           of fields as specified in INDEXCOUNT. 
  2777. "database name".INDEXFILENAME.# 
  2778.           Operating System file names for the open index files. Where # is any 
  2779.           number from 1 to the number of fields as specified in INDEXCOUNT. 
  2780. "database name".INDEXFIELDS.# 
  2781.           Field names used for indexing.  Where # is any number from 1 to the 
  2782.           number of fields as specified in INDEXCOUNT. 
  2783. "database name".TAGFIELDS.#. 
  2784.           For MDX index files, this is the number of defined TAG fields. Where 
  2785.           # is any number from 1 to the number of fields as specified in 
  2786.           INDEXCOUNT. 
  2787. "database name".INDEXTAGNAME.#.##. 
  2788.           For MDX index files, this is the TAG field name. Where # is any 
  2789.           number from 1 to the number of fields as specified in INDEXCOUNT. 
  2790.           Where ## is any number from 1 to the number of fields as specified in 
  2791.           INDEXFIELDS. 
  2792. "database name".INDEXTAGFIELDS.#.##. 
  2793.           For MDX index files, these are the fields that are specified by the 
  2794.           TAG name. Similar to INDEXFIELDNAME above. Where # is any number from 
  2795.           1 to the number of fields as specified in INDEXCOUNT. Where ## is any 
  2796.           number from 1 to the number of fields as specified in INDEXFIELDS. 
  2797. "database name".INDEXVALUE.#(.##). 
  2798.           This is the value for the current index record. Where # is any number 
  2799.           from 1 to the number of fields as specified in INDEXCOUNT. For MDX 
  2800.           TAG indexes, ## is any number from 1 to the number of fields as 
  2801.           specified in INDEXFIELDS. 
  2802.  
  2803.  
  2804. ΓòÉΓòÉΓòÉ 5.1.1. Field Naming Convention. ΓòÉΓòÉΓòÉ
  2805.  
  2806. With the exception of RexxBase database names, all database field names are 
  2807. prefixed by the Rexx variable you use to specify the database.  For example if 
  2808. you used the REXX variable DNAME as the database name the field count variable 
  2809. name would be DNAME.FIELDCOUNT. 
  2810.  
  2811. Database field names are directly accessible by the field name in the database. 
  2812. For example if your database had three fields defined as NAME, CITY, ZIP, then 
  2813. your REXX procedure will be able to read from and write to these fields by 
  2814. using the name directly.  The database name is not prefixed to the fields 
  2815. names. 
  2816.  
  2817. To find out the field names in a database use the following example: 
  2818.  
  2819. /* REXX */
  2820. parse arg dbfname
  2821. do i = 1 to dbfname.fieldcount
  2822.   k = "say dbfname.fieldname.i "
  2823.   k = k || " dbfname."dbfname.fieldname.i".type"
  2824.   k = k || " dbfname."dbfname.fieldname.i".length"
  2825.   interpret k
  2826. end /* do */
  2827. say dbfname
  2828. do i = 1 to dbfname.recordcount
  2829.   say dbfname.recordstatus
  2830.   say reading is rexxbase_readdbf("dbfname")
  2831.   do j = 1 to dbfname.fieldcount
  2832.     k = "say dbfname.fieldname.j "
  2833.     k = k || " is dbfname." || dbfname.fieldname.j
  2834.     interpret k     /* don't let the quoted field name fool you */
  2835.     /* the first dbfname.fieldname.j will appear as the field name after interpretation*/
  2836.     /* the second will have the value appear after interpretation */
  2837.    end /* do */
  2838.  end /* do */
  2839. /* since no index files */
  2840. if dbfname.indexcount = 0 then say "No MDX Files Or NDX files found"
  2841. else do
  2842.         /* but there maybe a MDX file */
  2843.         say "This file has an associated MDX file"
  2844.         end
  2845.  
  2846. say rexxbase_closedbf("dbfname")
  2847. return
  2848.  
  2849.  
  2850. ΓòÉΓòÉΓòÉ 5.1.2. Your Program Changing a RexxBase Field Value. ΓòÉΓòÉΓòÉ
  2851.  
  2852. In most cases if you change a RexxBase field value, like FIELDCOUNT there will 
  2853. be no effect internally to RexxBase or the actual database file. 
  2854.  
  2855.  
  2856. ΓòÉΓòÉΓòÉ 5.2. Database Fields. ΓòÉΓòÉΓòÉ
  2857.  
  2858. Database field name are accessible by concatenating the database variable name, 
  2859. your procedure assigns when opening the database, with the field name in the 
  2860. database.  For example if your database had three fields defined as NAME, CITY, 
  2861. ZIP, and your REXX procedure opened the database as ADDRESS then your REXX 
  2862. procedure will be able to read from and write to these fields by using the 
  2863. names ADDRESS.NAME, ADDRESS.CITY AND ADDRESS.ZIP. 
  2864.  
  2865. The database name is prefixed to the fields names. 
  2866.  
  2867.  
  2868. ΓòÉΓòÉΓòÉ 5.2.1. Example of Field Naming. ΓòÉΓòÉΓòÉ
  2869.  
  2870. Unlike RexxBase field names, database field are never prefixed with the 
  2871. database name when used as a function parameter or in field definitions.  For 
  2872. example when sorting on a field, you must specify what field to sort using the 
  2873. databasename.SORTFIELD.# construct.  The field name you put into the assignment 
  2874. is simply the field name as defined to the dBase database. 
  2875.  
  2876. /* to sort on field ZIP in database ADDRESS */
  2877. address.sortfield.0 = 1
  2878. address.sortfield.1 = zip /* wrong */
  2879. /* address.sortfield.1 = address.zip */
  2880. /* this will assign the value of address.zip to address.sortfield.1 */
  2881. /* which will only work if the value of address.zip is zip */
  2882.  
  2883.  
  2884. ΓòÉΓòÉΓòÉ 5.3. Field Verification. ΓòÉΓòÉΓòÉ
  2885.  
  2886. The following field verifications and edits are used. 
  2887.  
  2888.  
  2889. ΓòÉΓòÉΓòÉ 5.3.1. Date Fields ΓòÉΓòÉΓòÉ
  2890.  
  2891. Dates are validated based on two parameters. 
  2892.  
  2893. First, is the RexxBase Variable RexxBase.FormatDate. 
  2894.  
  2895. Second, is the Country Code, as defined by OS/2 NLS. 
  2896.  
  2897. RexxBase.FormatDate takes precedence.  If it is turned "OFF" then all date 
  2898. fields are assumed to be in the following 8 numeric-character format: 
  2899. CCYYMMDD. 
  2900.  
  2901. CC - century. 
  2902.  
  2903. YY - year. 
  2904.  
  2905. MM - month. 
  2906.  
  2907. DD - day. 
  2908.  
  2909. If you need to use dates that go past 1999/12/31 then you should always use 
  2910. this format.  This is because the default century for the other formats is 
  2911. "1900." 
  2912.  
  2913. If RexxBase.FormatDate is "ON", the default value, then date fields are 
  2914. formatted based on the Country Code.  As follows:  (all are 8 bytes long with 
  2915. separators). 
  2916.  
  2917. MM/DD/YY, slashes or some other separator is required 
  2918.  
  2919. DD/MM/YY, slashes or some other separator is required 
  2920.  
  2921. YY/MM/DD, slashes or some other separator is required 
  2922.  
  2923. Edits are performed on all 4 types of date fields. 
  2924.  
  2925. Century is ignored and defaults to 19. 
  2926.  
  2927. Year is any numeric value from 00 to 99. 
  2928.  
  2929. Month is any numeric value from 01 to 12. 
  2930.  
  2931. Day is any numeric value from 01 to last day of month. 
  2932.  
  2933.  
  2934. ΓòÉΓòÉΓòÉ 5.3.2. Numeric Fields ΓòÉΓòÉΓòÉ
  2935.  
  2936. Numeric field verification skips over white space characters until an 
  2937. alphanumeric character is found.  If the first non-white space character is 
  2938. alphabetic then the value is stored as zero - NOTE:  there is no error message. 
  2939. Field values larger than the defined length (and/or decimal count) are 
  2940. truncated. 
  2941.  
  2942.  
  2943. ΓòÉΓòÉΓòÉ 5.3.3. Logical fields ΓòÉΓòÉΓòÉ
  2944.  
  2945. Logical fields are tested and verified for correctness as follows: 
  2946.  
  2947. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2948. ΓöéFirst Byte of       ΓöéStored Γöé                              Γöé
  2949. ΓöéLogical Field Value ΓöéAs     Γöé                              Γöé
  2950. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2951. ΓöéT, t, 1, Y, or y    ΓöéT      Γöé                              Γöé
  2952. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2953. ΓöéF, f, 0, N, or n    ΓöéF      Γöé                              Γöé
  2954. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2955. ΓöéAny other value     ΓöéF      ΓöéLook for error message on     Γöé
  2956. Γöé                    Γöé       Γöérexxbase.error  stem variable.Γöé
  2957. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2958.  
  2959. RexxBase can also return REXX logical values. If the control variable 
  2960. REXXBASE.REXXLOGICALS  is set to ON, then read functions will either return 0 
  2961. for F value fields or 1 for T valued fields. 
  2962.  
  2963.  
  2964. ΓòÉΓòÉΓòÉ 5.3.4. MEMO Fields. ΓòÉΓòÉΓòÉ
  2965.  
  2966. Memo field names follow the same field naming convention as other field names. 
  2967.  
  2968.  
  2969. ΓòÉΓòÉΓòÉ 6. When You Are Done. ΓòÉΓòÉΓòÉ
  2970.  
  2971. After using the RexxBase functions your REXX command file may drop the RexxBase 
  2972. functions. This can be accomplished by using the Rexxbase_ShutDown function or 
  2973. issuing the Rexx command RXFUNCDROP for each function. 
  2974.  
  2975. While the IBM documentation recommends dropping functions.  we feel that it is 
  2976. an unnecessary exercise.  Do this only if you have literally thousands of 
  2977. functions registered.  The space requirements are minimal, but the search time, 
  2978. for thousands of functions, may be significant. 
  2979.  
  2980.  
  2981. ΓòÉΓòÉΓòÉ 6.1. Rexxbase_ShutDown. ΓòÉΓòÉΓòÉ
  2982.  
  2983. There may be a time when you want to drop all of the RexxBase functions from 
  2984. the Rexx function pool. To do this use the RexxBase command RexxBase_ShutDown. 
  2985. ShutDown function is to issue a Rexx Function Drop for each of the RexxBase 
  2986. functions.  It is pretty much performs the opposite utility of the 
  2987. RexxBase_Init command. 
  2988.  
  2989.  RexxBase_ShutDown() 
  2990.  
  2991.  There are no parameters. 
  2992.  
  2993.  There is no return code. 
  2994.  
  2995.  
  2996. ΓòÉΓòÉΓòÉ 6.2. Dropping Individual RexxBase Functions. ΓòÉΓòÉΓòÉ
  2997.  
  2998. The format of the command is  RXFUNCDROP(function) 
  2999.  
  3000. function is the name of the RexxBase routine as your procedure defined it. 
  3001.  
  3002. rxfuncdrop(rexxbase_opendbf) 
  3003.  
  3004. Return codes most likely to be returned are: 
  3005.  
  3006. o  0 - OK. 
  3007. o  40 - function not found. 
  3008.  
  3009.  
  3010. ΓòÉΓòÉΓòÉ 7. Returned Values and Internal Errors. ΓòÉΓòÉΓòÉ
  3011.  
  3012. The following two sections are lists of return values and internal error 
  3013. messages. 
  3014.  
  3015.  
  3016. ΓòÉΓòÉΓòÉ 7.1. Return Values and Functions ΓòÉΓòÉΓòÉ
  3017.  
  3018.  The following is a list of possible return values and associated function 
  3019. names: 
  3020.  
  3021. o BOF 
  3022.  
  3023.   Rexxbase_ReadDBF 
  3024.  
  3025.   Rexxbase_ReadDBF 
  3026.  
  3027.   Rexxbase_ReadDBF 
  3028.  
  3029.   Rexxbase_GoToRecord 
  3030.  
  3031.   Rexxbase_GoToRecord 
  3032.  
  3033.   Rexxbase_ScanForRecord 
  3034.  
  3035.   Rexxbase_ScanForRecord 
  3036.  
  3037. o Bad Record Number 
  3038.  
  3039.   Rexxbase_GoToRecord 
  3040.  
  3041. o Bad Variable Name. Rexx Rtn  is %2.2x\0 
  3042.  
  3043.   Rexxbase_OpenDBF 
  3044.  
  3045. o Bad Variable Name;  rc  is %2.2x\0 
  3046.  
  3047.   Rexxbase_CreateDBF 
  3048.  
  3049.   Rexxbase_CreateFromDBF 
  3050.  
  3051. o Can't Create Area For Join 
  3052.  
  3053.   Rexxbase_JoinDBF 
  3054.  
  3055. o Can't Find filename 
  3056.  
  3057.   Rexxbase_SortDBF 
  3058.  
  3059. o Can't Open Index File, Database Is Open 
  3060.  
  3061.   Rexxbase_OpenDBF 
  3062.  
  3063. o Can't Open Sort DBF File 
  3064.  
  3065.   Rexxbase_SummarizeDBF 
  3066.  
  3067.   Rexxbase_SortDBF 
  3068.  
  3069. o Can't Open filename 
  3070.  
  3071.   Rexxbase_OpenDBF 
  3072.  
  3073. o Can't Write To Sort DBF file 
  3074.  
  3075.   Rexxbase_SummarizeDBF 
  3076.  
  3077.   Rexxbase_SortDBF 
  3078.  
  3079. o Create Failed 
  3080.  
  3081.   Rexxbase_CreateDBF 
  3082.  
  3083. o Create Index File Failed 
  3084.  
  3085.   Rexxbase_CreateMultipleIndexFile 
  3086.  
  3087. o CreateFrom Failed 
  3088.  
  3089.   Rexxbase_CreateFromDBF 
  3090.  
  3091. o Database Name Already In Use 
  3092.  
  3093.   Rexxbase_OpenDBF 
  3094.  
  3095.   Rexxbase_CreateDBF 
  3096.  
  3097.   Rexxbase_CreateFromDBF 
  3098.  
  3099. o Database Tied TO A Join 
  3100.  
  3101.   Rexxbase_ReindexDBF 
  3102.  
  3103. o Database Tied To A Join 
  3104.  
  3105.   Rexxbase_CloseDBF 
  3106.  
  3107.   Rexxbase_ReadDBF 
  3108.  
  3109.   Rexxbase_ReadPrevDBF 
  3110.  
  3111.   Rexxbase_GoToRecord 
  3112.  
  3113.   Rexxbase_WriteDBF 
  3114.  
  3115.   Rexxbase_UpdateDBF 
  3116.  
  3117.   Rexxbase_ScanForRecord 
  3118.  
  3119.   Rexxbase_CreateFromDBF 
  3120.  
  3121.   Rexxbase_ModifyDBF 
  3122.  
  3123.   Rexxbase_DeleteRecord 
  3124.  
  3125.   Rexxbase_UndeleteRecord 
  3126.  
  3127.   Rexxbase_FindRecord 
  3128.  
  3129.   Rexxbase_ChangePrimaryIndex 
  3130.  
  3131.   Rexxbase_CreateIndex 
  3132.  
  3133.   Rexxbase_CreateMultipleIndexFile 
  3134.  
  3135.   Rexxbase_AddTagToIndex 
  3136.  
  3137.   Rexxbase_DropTagFromIndex 
  3138.  
  3139.   Rexxbase_PackDBF 
  3140.  
  3141.   Rexxbase_SummarizeDBF 
  3142.  
  3143.   Rexxbase_SortDBF 
  3144.  
  3145. o Failed To Add Tag To Index 
  3146.  
  3147.   Rexxbase_AddTagToIndex 
  3148.  
  3149. o Failed To Drop Tag From Index 
  3150.  
  3151.   Rexxbase_DropTagFromIndex 
  3152.  
  3153. o First Database Name Unknown 
  3154.  
  3155.   Rexxbase_JoinDBF 
  3156.  
  3157. o First Joined DBF Name Not Specified 
  3158.  
  3159.   Rexxbase_JoinDBF 
  3160.  
  3161. o Index File Not Opened 
  3162.  
  3163.   Rexxbase_ChangePrimaryIndex 
  3164.  
  3165. o Index File Not Opened or Tag Set 
  3166.  
  3167.   Rexxbase_FindRecord 
  3168.  
  3169. o Index Limit Reached 
  3170.  
  3171.   Rexxbase_OpenDBF 
  3172.  
  3173. o Index Not Built 
  3174.  
  3175.   Rexxbase_CreateIndex 
  3176.  
  3177. o Index Tag Name Not Found 
  3178.  
  3179.   Rexxbase_SetIndexTagName 
  3180.  
  3181. o Internal File Processing Error 
  3182.  
  3183.   Rexxbase_ReadDBF 
  3184.  
  3185.   Rexxbase_ReadPrevDBF 
  3186.  
  3187.   Rexxbase_GoToRecord 
  3188.  
  3189.   Rexxbase_ScanForRecord 
  3190.  
  3191.   Rexxbase_FindRecord 
  3192.  
  3193.   Rexxbase_SummarizeDBF 
  3194.  
  3195.   Rexxbase_SortDBF 
  3196.  
  3197. o Internal processing error 
  3198.  
  3199.   Rexxbase_JoinDBF 
  3200.  
  3201. o Invalid Condition Found 
  3202.  
  3203.   Rexxbase_FilterDBF 
  3204.  
  3205.   Rexxbase_ScanForRecord 
  3206.  
  3207.   Rexxbase_JoinDBF 
  3208.  
  3209. o Invalid Field Specification Found 
  3210.  
  3211.   Rexxbase_JoinDBF 
  3212.  
  3213. o Invalid Index Ordinal 
  3214.  
  3215.   Rexxbase_ChangePrimaryIndex 
  3216.  
  3217.   Rexxbase_ChangePrimaryIndex 
  3218.  
  3219. o Invalid Record Position 
  3220.  
  3221.   Rexxbase_UpdateDBF 
  3222.  
  3223. o Join Database Name Already In Use 
  3224.  
  3225.   Rexxbase_JoinDBF 
  3226.  
  3227. o Missing Index File Name,  Database is open. 
  3228.  
  3229.   Rexxbase_OpenDBF 
  3230.  
  3231. o Modify Failed 
  3232.  
  3233.   Rexxbase_ModifyDBF 
  3234.  
  3235. o New Tag Name Too Long 
  3236.  
  3237.   Rexxbase_AddTagToIndex 
  3238.  
  3239. o No Conditions Specified 
  3240.  
  3241.   Rexxbase_ScanForRecord 
  3242.  
  3243. o No DBF Name To Copy Structure To 
  3244.  
  3245.   Rexxbase_CreateFromDBF 
  3246.  
  3247. o No Filename Assigned  To Variable 
  3248.  
  3249.   Rexxbase_CreateDBF 
  3250.  
  3251. o No Filename Assigned To Variable 
  3252.  
  3253.   Rexxbase_OpenDBF 
  3254.  
  3255.   Rexxbase_CreateFromDBF 
  3256.  
  3257. o No Index Field Names Specified 
  3258.  
  3259.   Rexxbase_CreateIndex 
  3260.  
  3261. o No Index File Name Specified 
  3262.  
  3263.   Rexxbase_CreateIndex 
  3264.  
  3265.   Rexxbase_CreateMultipleIndexFile 
  3266.  
  3267. o No Index Ordinal Specified 
  3268.  
  3269.   Rexxbase_ChangePrimaryIndex 
  3270.  
  3271. o No Index Tag File Opened 
  3272.  
  3273.   Rexxbase_SetIndexTagName 
  3274.  
  3275. o No Index Tag Name Specified 
  3276.  
  3277.   Rexxbase_SetIndexTagName 
  3278.  
  3279. o No Joining Condition Specified 
  3280.  
  3281.   Rexxbase_JoinDBF 
  3282.  
  3283. o No Joining Fields Specified 
  3284.  
  3285.   Rexxbase_JoinDBF 
  3286.  
  3287. o No Locate String Specified 
  3288.  
  3289.   Rexxbase_FindRecord 
  3290.  
  3291. o No New Tag Name Specified 
  3292.  
  3293.   Rexxbase_AddTagToIndex 
  3294.  
  3295.   Rexxbase_DropTagFromIndex 
  3296.  
  3297. o No Record Number Specified 
  3298.  
  3299.   Rexxbase_GoToRecord 
  3300.  
  3301. o No Record Read 
  3302.  
  3303.   Rexxbase_DeleteRecord 
  3304.  
  3305.   Rexxbase_UndeleteRecord 
  3306.  
  3307. o No Rexx DBF Name Specified 
  3308.  
  3309.   Rexxbase_OpenDBF 
  3310.  
  3311.   Rexxbase_CloseDBF 
  3312.  
  3313.   Rexxbase_ReadDBF 
  3314.  
  3315.   Rexxbase_ReadPrevDBF 
  3316.  
  3317.   Rexxbase_GoToRecord 
  3318.  
  3319.   Rexxbase_WriteDBF 
  3320.  
  3321.   Rexxbase_UpdateDBF 
  3322.  
  3323.   Rexxbase_FilterDBF 
  3324.  
  3325.   Rexxbase_ScanForRecord 
  3326.  
  3327.   Rexxbase_CreateDBF 
  3328.  
  3329.   Rexxbase_CreateFromDBF 
  3330.  
  3331.   Rexxbase_ModifyDBF 
  3332.  
  3333.   Rexxbase_DeleteRecord 
  3334.  
  3335.   Rexxbase_UndeleteRecord 
  3336.  
  3337.   Rexxbase_FindRecord 
  3338.  
  3339.   Rexxbase_SetIndexTagName 
  3340.  
  3341.   Rexxbase_ChangePrimaryIndex 
  3342.  
  3343.   Rexxbase_CreateIndex 
  3344.  
  3345.   Rexxbase_CreateMultipleIndexFile 
  3346.  
  3347.   Rexxbase_AddTagToIndex 
  3348.  
  3349.   Rexxbase_DropTagFromIndex 
  3350.  
  3351.   Rexxbase_ReindexDBF 
  3352.  
  3353.   Rexxbase_PackDBF 
  3354.  
  3355.   Rexxbase_SummarizeDBF 
  3356.  
  3357.   Rexxbase_SortDBF 
  3358.  
  3359. o No Rexx Joined DBF Name Specified 
  3360.  
  3361.   Rexxbase_JoinDBF 
  3362.  
  3363. o No Sort DBF Name Specified 
  3364.  
  3365.   Rexxbase_SummarizeDBF 
  3366.  
  3367.   Rexxbase_SortDBF 
  3368.  
  3369. o No Tag Index Fields Specified 
  3370.  
  3371.   Rexxbase_AddTagToIndex 
  3372.  
  3373.   Rexxbase_DropTagFromIndex 
  3374.  
  3375. o Not Enough Memory For Sorting 
  3376.  
  3377.   Rexxbase_SummarizeDBF 
  3378.  
  3379.   Rexxbase_SortDBF 
  3380.  
  3381. o Not Enough Memory For Summarizing or Sorting 
  3382.  
  3383.   Rexxbase_SummarizeDBF 
  3384.  
  3385. o Primary Index File Not MDX Format 
  3386.  
  3387.   Rexxbase_DropTagFromIndex 
  3388.  
  3389. o Primary Index Not MDX Type 
  3390.  
  3391.   Rexxbase_SetIndexTagName 
  3392.  
  3393. o Record Locked 
  3394.  
  3395.   Rexxbase_SortDBF 
  3396.  
  3397. o Record Not Found 
  3398.  
  3399.   Rexxbase_FindRecord 
  3400.  
  3401.   Rexxbase_FindRecord 
  3402.  
  3403.   Rexxbase_FindRecord 
  3404.  
  3405.   Rexxbase_FindRecord 
  3406.  
  3407.   Rexxbase_FindRecord 
  3408.  
  3409. o Record locked 
  3410.  
  3411.   Rexxbase_ReadDBF 
  3412.  
  3413.   Rexxbase_ReadPrevDBF 
  3414.  
  3415.   Rexxbase_GoToRecord 
  3416.  
  3417.   Rexxbase_ScanForRecord 
  3418.  
  3419.   Rexxbase_FindRecord 
  3420.  
  3421.   Rexxbase_JoinDBF 
  3422.  
  3423.   Rexxbase_SummarizeDBF 
  3424.  
  3425. o Record with duplicate key not updated 
  3426.  
  3427.   Rexxbase_UpdateDBF 
  3428.  
  3429.   Rexxbase_PackDBF 
  3430.  
  3431. o Record with duplicate key not written 
  3432.  
  3433.   Rexxbase_WriteDBF 
  3434.  
  3435. o Second Database Name Unknown 
  3436.  
  3437.   Rexxbase_JoinDBF 
  3438.  
  3439. o Second Joined DBF Name Not Specified 
  3440.  
  3441.   Rexxbase_JoinDBF 
  3442.  
  3443. o Sort Field Count Not Found 
  3444.  
  3445.   Rexxbase_SummarizeDBF 
  3446.  
  3447.   Rexxbase_SortDBF 
  3448.  
  3449. o TOF 
  3450.  
  3451.   Rexxbase_ReadPrevDBF 
  3452.  
  3453.   Rexxbase_ReadPrevDBF 
  3454.  
  3455.   Rexxbase_GoToRecord 
  3456.  
  3457. o Tag Index File Has No Tags 
  3458.  
  3459.   Rexxbase_SetIndexTagName 
  3460.  
  3461. o Tag Index File Not Opened 
  3462.  
  3463.   Rexxbase_AddTagToIndex 
  3464.  
  3465.   Rexxbase_DropTagFromIndex 
  3466.  
  3467. o Unable To Write Fields To  File; rc = %3.3d 
  3468.  
  3469.   Rexxbase_SummarizeDBF 
  3470.  
  3471.   Rexxbase_SortDBF 
  3472.  
  3473. o Unknown Database Name 
  3474.  
  3475.   Rexxbase_CloseDBF 
  3476.  
  3477.   Rexxbase_ReadDBF 
  3478.  
  3479.   Rexxbase_ReadPrevDBF 
  3480.  
  3481.   Rexxbase_GoToRecord 
  3482.  
  3483.   Rexxbase_WriteDBF 
  3484.  
  3485.   Rexxbase_UpdateDBF 
  3486.  
  3487.   Rexxbase_FilterDBF 
  3488.  
  3489.   Rexxbase_ScanForRecord 
  3490.  
  3491.   Rexxbase_CreateFromDBF 
  3492.  
  3493.   Rexxbase_ModifyDBF 
  3494.  
  3495.   Rexxbase_DeleteRecord 
  3496.  
  3497.   Rexxbase_UndeleteRecord 
  3498.  
  3499.   Rexxbase_FindRecord 
  3500.  
  3501.   Rexxbase_SetIndexTagName 
  3502.  
  3503.   Rexxbase_ChangePrimaryIndex 
  3504.  
  3505.   Rexxbase_CreateIndex 
  3506.  
  3507.   Rexxbase_CreateMultipleIndexFile 
  3508.  
  3509.   Rexxbase_AddTagToIndex 
  3510.  
  3511.   Rexxbase_DropTagFromIndex 
  3512.  
  3513.   Rexxbase_ReindexDBF 
  3514.  
  3515.   Rexxbase_PackDBF 
  3516.  
  3517.   Rexxbase_SummarizeDBF 
  3518.  
  3519.   Rexxbase_SortDBF 
  3520.  
  3521.  
  3522. ΓòÉΓòÉΓòÉ 7.2. Internal Errors. ΓòÉΓòÉΓòÉ
  3523.  
  3524. The following is a list of internal errors. 
  3525.  
  3526. o All other data ignored after DBF name 
  3527.  
  3528. o All other data ignored after Sort DBF name 
  3529.  
  3530. o Bad date found, changed to all spaces. 
  3531.  
  3532. o Bad field type when getting field value 
  3533.  
  3534. o Bad_Field_Count 
  3535.  
  3536. o Can not find tagname 
  3537.  
  3538. o Can't allocate memo space 
  3539.  
  3540. o Can't make float field part of a key 
  3541.  
  3542. o Can't make logical field part of a key 
  3543.  
  3544. o Can't make memo field part of a key 
  3545.  
  3546. o Can't rebuild, new file not created 
  3547.  
  3548. o Can't rebuild, old file not open 
  3549.  
  3550. o Can't rename file for modify 
  3551.  
  3552. o Data Type Mismatch 
  3553.  
  3554. o Duplicate key not written to index file 
  3555.  
  3556. o Error while reading record, packing continues 
  3557.  
  3558. o Field Length Not Defined 
  3559.  
  3560. o Field Length Not Defined Correctly 
  3561.  
  3562. o Field Name Not Okay 
  3563.  
  3564. o Field Not Defined 
  3565.  
  3566. o Field Size Not Defined Correctly 
  3567.  
  3568. o Field Type Not Defined 
  3569.  
  3570. o Field Type Not Valid 
  3571.  
  3572. o Field delimiter character not found. Import stops. 
  3573.  
  3574. o Field truncated 
  3575.  
  3576. o Field truncated. 
  3577.  
  3578. o Field_Not_Defined 
  3579.  
  3580. o Invalid expression 
  3581.  
  3582. o Invalid expression - data type mismatch 
  3583.  
  3584. o Invalid expression - invalid logic connector 
  3585.  
  3586. o Key length too long 
  3587.  
  3588. o Key length too short 
  3589.  
  3590. o MDX File Already Opened 
  3591.  
  3592. o Memo field missing field delimiter, Import stops. 
  3593.  
  3594. o Memo field missing start field delimiter, Import stops. 
  3595.  
  3596. o Memo fields not allowed in conditions 
  3597.  
  3598. o No records to index 
  3599.  
  3600. o Not enough memory for index sorting 
  3601.  
  3602. o Not enough memory for mdx sorting 
  3603.  
  3604. o Numeric field expected, not found on input file. Import stops. 
  3605.  
  3606. o Read record size does not match 
  3607.  
  3608. o Record Size Too Large 
  3609.  
  3610. o Record with duplicate key not written 
  3611.  
  3612. o Tag name already in use. 
  3613.  
  3614. o Third parameter must be EXACT.  Parameter ignored 
  3615.  
  3616. o Too many files opened 
  3617.  
  3618. o Unable to change memo file size. 
  3619.  
  3620. o Unexpected encounter in read text file 
  3621.  
  3622. o Unknown delimiter character found. Import stops 
  3623.  
  3624. o Unknown field name in field list 
  3625.  
  3626. o Unknown field specified in key file define 
  3627.  
  3628. o Unknown field specified in key file open 
  3629.  
  3630. o Unknown name in expression 
  3631.  
  3632. o Unknown operator type in parse expression logic 
  3633.  
  3634. o Would add duplicate 
  3635.  
  3636. o Written record size does not match 
  3637.  
  3638. o alloc error 
  3639.  
  3640. o invalid expression - data type mismatch 
  3641.  
  3642. o logic field value invalid, value set to 'F' 
  3643.  
  3644. o memo field write failed 
  3645.  
  3646. o memo update failed 
  3647.  
  3648. o passed bad memopointer to write memo 
  3649.  
  3650.  
  3651. ΓòÉΓòÉΓòÉ 8. Control Variables. ΓòÉΓòÉΓòÉ
  3652.  
  3653. The following is a description of RexxBase error, file, and date handling and 
  3654. extended control facilities. 
  3655.  
  3656.  
  3657. ΓòÉΓòÉΓòÉ 8.1. RexxBase Errors ΓòÉΓòÉΓòÉ
  3658.  
  3659. Errors are reported in two different ways, return codes and the error stem 
  3660. variable. If the RexxBase function returns a value other than "" then the 
  3661. function did not complete successfully. 
  3662.  
  3663.  
  3664. ΓòÉΓòÉΓòÉ 8.1.1. Where To Find Internal Error Messages ΓòÉΓòÉΓòÉ
  3665.  
  3666.  You may direct error message to one of three targets. 
  3667.  
  3668. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3669. ΓöéTarget    ΓöéDescription                                  Γöé
  3670. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3671. ΓöéCON       ΓöéRexxBase sends all error messages to the     Γöé
  3672. Γöé          ΓöéSTDIO file, or console.  This is the default.Γöé
  3673. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3674. ΓöéPRN       ΓöéRexxBase sends all error messages to the PRN Γöé
  3675. Γöé          Γöéfile, or printer.                            Γöé
  3676. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3677. ΓöéSTEM      ΓöéAll messages, for the last executed RexxBase Γöé
  3678. Γöé          Γöéfunction are sent to the stem variable       Γöé
  3679. Γöé          ΓöéRexxBase.Error.   See below.                 Γöé
  3680. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3681.  
  3682.  You should set this variable prior to initializing RexxBase. 
  3683.  
  3684. /* */
  3685. RexxBase.Error = 'stem' /* sends rexxbase errors to the stem variable */
  3686. ...
  3687. dbf = ''
  3688. rc = RexxBase_OpenDBF('dbf')
  3689. if rc <> '' then do
  3690.    do i = 1 to rexxbase.error.0
  3691.      say rexxbase.error.i
  3692.   end
  3693. end
  3694. ...
  3695.  
  3696. Whether a function failed or not, there maybe other types of errors and warning 
  3697. messages that are useful to your program. These messages are found in the 
  3698. RexxBase error stem variable. 
  3699.  
  3700. All internal system and control errors can be directed to a stem variable named 
  3701. REXXBASE.ERROR.  The zeroth element is a counter This element contains them 
  3702. number of errors in the stem variable.  Each time you call a RexxBase function 
  3703. the counter is reset to zero.  Your procedure should check what is returned 
  3704. from the function call. 
  3705.  
  3706. For a further description of stem variables refer to your Rexx documentation. 
  3707.  
  3708.  
  3709. ΓòÉΓòÉΓòÉ 8.1.2. Internal Error List. ΓòÉΓòÉΓòÉ
  3710.  
  3711. The following is a list of errors and a brief explanation. 
  3712.  
  3713. Error     Description 
  3714. All other data ignored after Sort DBF name 
  3715.           More parameters were specified than are required 
  3716. Logic field value invalid, value set to 'F' 
  3717.           The value of a logic field, which will be adding to or updating a 
  3718.           database record contained an invalid value. 
  3719. Can't position at end of memo file 
  3720.           There is a severe error with a DBT file. 
  3721. Bad field type when getting field value 
  3722.           Internal error - A field type has changed 
  3723. Bad date found, changed to all spaces. 
  3724.           The value of a date field, which will be added to or updating a 
  3725.           database record contained an invalid value. 
  3726. All other data ignored after DBF name 
  3727.           More parameters were specified than are required 
  3728. Dos open error ### for file @@@@@@@@@@ 
  3729.           Operating system error, value found in ###, while trying to open file 
  3730.           @@@@@@@@@@@ 
  3731. Dos read anchor error #### for file @@@@@@@@@@ 
  3732.           Operating system error, value found in ###, while trying to read file 
  3733.           @@@@@@@@@@@ 
  3734. Unknown field specified in key file open 
  3735.           A field name specified in an index build is not part of the database 
  3736. Can't make memo field part of a key 
  3737.           A field name specified in an index build is a memo field.  Memo 
  3738.           fields can not be part of an index. 
  3739. Can't make logical field part of a key 
  3740.           A field name specified in an index build is a logical field.  Logical 
  3741.           fields can not be part of an index. 
  3742. Unknown field specified in key file define 
  3743.           A field name specified in an index build is not in the database. 
  3744. Key length too short 
  3745.           Internal error, the calculated length for a key is less than one (1). 
  3746. Would add duplicate 
  3747.           Writing a new record to database creates a duplicate key.  Unique key 
  3748.           value is FALSE. 
  3749. Dos write anchor error #### for file @@@@@@@@@@ 
  3750.           Operating system error, value found in ###, while trying to write 
  3751.           file @@@@@@@@@@@ 
  3752. Not enough memory for index sorting. 
  3753.           Not enough internal memory space to create temporary sort file for 
  3754.           indexing function. 
  3755. Can't rename file for modify 
  3756.           Modify Structure function attempts to rename the old file.  Failure 
  3757.           probably caused by duplicate name. 
  3758. Can't rebuild, old file not open 
  3759.           Internal error.  Somehow the file has been closed. 
  3760. Can't rebuild, new file not created 
  3761.           Modify Structure function attempted to create the new file.  Old file 
  3762.           has been renamed but ...failure probably caused by duplicate name or 
  3763.           lack of disk space. 
  3764. Unable to allocate temp file memory ## 
  3765.           Not enough internal memory space to create file space.  Operating 
  3766.           system error value is ## 
  3767. Dos open error ### for text file @@@@@@@@@@@ 
  3768.           Operating system error, value found in ###, while trying to open DBT 
  3769.           file @@@@@@@@@@@ 
  3770. Field Not Defined 
  3771.           Create function error - can not find variable. 
  3772. Bad Field Count 
  3773.           Field count for Create is either less than 1 or greater than 128 
  3774. Field Name Not Okay 
  3775.           Field name does not satisfy naming convention. 
  3776. Field Type Not Defined 
  3777.           Create function needs to know the field type(characteristics) 
  3778. Field Type Not Valid 
  3779.           Field type specified is not C, D, L, N or M. 
  3780. Field Type Not Valid 
  3781.           Create function needs to know the field length 
  3782. Field Length Not Defined Correctly 
  3783.           The field length requested does not satisfy the length limitations 
  3784.           for its type. 
  3785. Record Size Too Large 
  3786.           Calculated record length is greater than 4000.  4000 is maximum 
  3787.           allowed. 
  3788.  
  3789.  
  3790. ΓòÉΓòÉΓòÉ 8.2. File Control Variables ΓòÉΓòÉΓòÉ
  3791.  
  3792. RexxBase offers several control variables to enhance control over your database 
  3793. files. 
  3794.  
  3795.  
  3796. ΓòÉΓòÉΓòÉ 8.2.1. REXXBASE.UPDATEHEADERCOUNTER. ΓòÉΓòÉΓòÉ
  3797.  
  3798. You can control how often the database header record gets updated.  You change 
  3799. the RexxBase.UpdateHeaderCounter.  This sets an internal counter indicating how 
  3800. often after every RexxBase_WriteDBF command the header record is updated.  The 
  3801. higher the number the less often the header record is updated.  But if the 
  3802. header record is not updated  and there is a system crash then the header 
  3803. record will not contain accurate information. 
  3804.  
  3805. The default value is one. 
  3806.  
  3807. A value of zero indicates that the header record is only updated when the 
  3808. database is closed. 
  3809.  
  3810. The value is only set when a database is opened.  Therefore changing the value 
  3811. after a database has been opened has no affect on that database. 
  3812.  
  3813.  
  3814. ΓòÉΓòÉΓòÉ 8.2.2. Safety - Preventing File Deletion ΓòÉΓòÉΓòÉ
  3815.  
  3816. REXXBASE.SAFETY allows for a level of protection from destroying, deleting or 
  3817. overwriting database and index files. 
  3818.  
  3819. When your routine sets REXXBASE.SAFETY to "ON", anytime RexxBase opens a file, 
  3820. in a creation function (i.e.  sort output file, create index, etc.)  the 
  3821. function will fail.  Check both the return code from the function and/or the 
  3822. rexxbase.error  stem variable. 
  3823.  
  3824. When REXXBASE.SAFETY is set to "OFF" then any routine can destroy a file. 
  3825. There may be information in the  rexxbase.error  stem variable but the return 
  3826. code, even if successful, will be "". 
  3827.  
  3828. The default value is "OFF".  If set incorrectly the default value will be used. 
  3829.  
  3830.  
  3831. ΓòÉΓòÉΓòÉ 8.2.3. REXXBASE.READ ΓòÉΓòÉΓòÉ
  3832.  
  3833. When REXXBASE.READ is set to "OFF" then the Rexxbase_OpenDBF will open the file 
  3834. for NO read access.  This means any routine that reads a file, that was opened 
  3835. when set REXXBASE.READ was set to "OFF", will fail. 
  3836.  
  3837. The default value is "ON".  If set incorrectly the default value will be used. 
  3838.  
  3839.  
  3840. ΓòÉΓòÉΓòÉ 8.2.4. REXXBASE.WRITE ΓòÉΓòÉΓòÉ
  3841.  
  3842. When REXXBASE.WRITE is set to "OFF" then the Rexxbase_OpenDBF will open the 
  3843. file for NO write access.  This means any routine that writes to a file, that 
  3844. was opened when set REXXBASE.READ was set to "OFF", will fail. 
  3845.  
  3846. The default value is "ON".  If set incorrectly the default value will be used. 
  3847.  
  3848.  
  3849. ΓòÉΓòÉΓòÉ 8.2.5. REXXBASE.UNIQUE ΓòÉΓòÉΓòÉ
  3850.  
  3851. When REXXBASE.UNIQUE is set to "ON" then the Rexxbase_CreateIndex creates an 
  3852. index file with unique keys.  This prevents duplicate keys from being added to 
  3853. the index file. 
  3854.  
  3855. When REXXBASE.UNIQUE is set to "OFF" then the Rexxbase_CreateIndex creates an 
  3856. index file without unique keys.  This allows duplicate keys from being added to 
  3857. the index file with Rexxbase_ReadDBF and Rexxbase_UpdateDBF functions. 
  3858.  
  3859. The default value is "OFF".  If set incorrectly the default value will be used. 
  3860. This control is less restrictive than Rexxbase.ALLOWDUPLICATEINDEXES. 
  3861.  
  3862.  
  3863. ΓòÉΓòÉΓòÉ 8.2.6. REXXBASE.ALLOWDUPLICATEINDEXES ΓòÉΓòÉΓòÉ
  3864.  
  3865. When REXXBASE.ALLOWDUPLICATEINDEXES is set to "NO" the RexxBase_WriteDBF and 
  3866. RexxBase_UpdateDBF functions will not add record when another record with a 
  3867. similar index is present. This control is more restrictive than 
  3868. Rexxbase.UNIQUE. 
  3869.  
  3870. When REXXBASE.ALLOWDUPLICATEINDEXES is set to "YES" then the Rexxbase_WriteDBF 
  3871. and Rexxbase_UpdateDBF can add records to the DBF even if a duplicate key 
  3872. exists. 
  3873.  
  3874. The default value is "YES".  If set incorrectly the default value will be used. 
  3875.  
  3876.  
  3877. ΓòÉΓòÉΓòÉ 8.2.7. REXXBASE.SHARE ΓòÉΓòÉΓòÉ
  3878.  
  3879. Rexxbase offers a facility for file sharing your databases. 
  3880.  
  3881. When REXXBASE.SHARE is set to "OFF" then the Rexxbase_OpenDBF will open the 
  3882. file NO OTHER external program file access.  This will prevent any other 
  3883. program in the system from accessing the file.  Also, if the file is already 
  3884. opened, by another program, your routine will fail.  This is file locking. 
  3885.  
  3886. When REXXBASE.SHARE is set to "READ" then the Rexxbase_OpenDBF will open the 
  3887. file for read only sharing.  This will allow any other program in the system to 
  3888. read your open database file. 
  3889.  
  3890. Also, if the file is already opened by another program for no read sharing, 
  3891. your routine will fail. 
  3892.  
  3893. When REXXBASE.SHARE is set to "WRITE" then the Rexxbase_OpenDBF will open the 
  3894. file for write only sharing.  This will allow any other program in the system 
  3895. to have write access the file, not read access. 
  3896.  
  3897. Also, if the file is already opened by another program for no write sharing, 
  3898. your routine will fail. 
  3899.  
  3900. When REXXBASE.SHARE is set to "READWRITE" then the Rexxbase_OpenDBF will open 
  3901. the file for read and write sharing.  This will allow any other program in the 
  3902. system to have access the file. 
  3903.  
  3904. Also, if the file is already opened by another program for no sharing, your 
  3905. routine will fail. 
  3906.  
  3907. The default value is "OFF".  If set incorrectly the default value will be used. 
  3908.  
  3909. You may set REXXBASE.SHARE at anytime and as often as you like.  But it is only 
  3910. used when the database is opened with a Rexxbase_OpenDBF. 
  3911.  
  3912.  
  3913. ΓòÉΓòÉΓòÉ 8.3. Controlling Date Format. ΓòÉΓòÉΓòÉ
  3914.  
  3915. RexxBase offers a way to control the format of dates.  By turning the format 
  3916. control on and off dates are presented in either internal xBase format or in a 
  3917. display format. 
  3918.  
  3919.  
  3920. ΓòÉΓòÉΓòÉ 8.3.1. REXXBASE.INCLUDECENTURY ΓòÉΓòÉΓòÉ
  3921.  
  3922. When RexxBase.IncludeCenture is turned "ON" then all date fields are required 
  3923. to specify dates with the century. Format is CCYYMMDD.  This parameters 
  3924. enforces a requirement that when a date is passed to REXXBASE the century value 
  3925. is included. If century is not included RexxBase will replace the date string 
  3926. with spaces. 
  3927.  
  3928. If RexxBase.IncludeCentury is set to 'OFF' (the default value) a value of 
  3929. current century is preappended to the year.  The default value may create 
  3930. incorrect internal date values.  Your system is better of if your programs 
  3931. supply the century.  Thereby requiring you to consistently use the correct 
  3932. value. 
  3933.  
  3934.  
  3935. ΓòÉΓòÉΓòÉ 8.3.2. REXXBASE.FORMATDATE. ΓòÉΓòÉΓòÉ
  3936.  
  3937. When RexxBase.FormatDate is turned "OFF" then all date fields are in the 
  3938. following 8 numeric-character format:  CCYYMMDD. 
  3939.  
  3940. CC - century. 
  3941.  
  3942. YY - year. 
  3943.  
  3944. MM - month. 
  3945.  
  3946. DD - day. 
  3947.  
  3948. If RexxBase.FormatDate is "ON", the default value, then date fields are 
  3949. formatted based on the Country Code.  as follows:  (all are 8 bytes long with 
  3950. separators). 
  3951.  
  3952. MM/DD/YY, slashes or some other separator is required 
  3953.  
  3954. DD/MM/YY, slashes or some other separator is required 
  3955.  
  3956. YY/MM/DD, slashes or some other separator is required 
  3957.  
  3958. The default value is "ON".  If set incorrectly the default value will be used. 
  3959.  
  3960.  
  3961. ΓòÉΓòÉΓòÉ 8.4. Controlling File Format. ΓòÉΓòÉΓòÉ
  3962.  
  3963. RexxBase offers a way to control which file format version of dBase to use.  By 
  3964. specifying the format you are able to use either dBase III or dBase IV formats. 
  3965.  
  3966. dBase internal file structure allows for files to be identified with one 
  3967. exception. If a database does not use a memo field and a dBase IV file does not 
  3968. use a float field then there is not way to distinguish between the two 
  3969. versions. Therefore, you should always specify the file format. 
  3970.  
  3971.  
  3972. ΓòÉΓòÉΓòÉ 8.4.1. REXXBASE.dBaseFileFormat. ΓòÉΓòÉΓòÉ
  3973.  
  3974. When RexxBase.dBaseFileFormat is set to "dBase3", the default value, then all 
  3975. database functions are processed in dBase III format. 
  3976.  
  3977. When set to "dBase4", the files are processed using dBase IV format. 
  3978.  
  3979. If set incorrectly the default value will be used. 
  3980.  
  3981.  
  3982. ΓòÉΓòÉΓòÉ 8.4.2. REXXBASE.REXXLOGICAL ΓòÉΓòÉΓòÉ
  3983.  
  3984. When RexxBase.REXXLOGICAL is set to 'ON', logical fields internally set to 'Y' 
  3985. will be set externally to '1' and fields set to 'N" will be set as '0', 
  3986.  
  3987. When set to 'OFF', the internal value of a logical field is set. 
  3988.  
  3989. If set incorrectly the default value "OFF" will be used. 
  3990.  
  3991.  
  3992. ΓòÉΓòÉΓòÉ 8.4.3. REXXBASE.SKIPDELETED ΓòÉΓòÉΓòÉ
  3993.  
  3994. When RexxBase.SKIPDELETED  is set to 'ON' then all RexxBase functions used to 
  3995. retrieve records will not return a deleted record. This will cause either the 
  3996. next non-deleted record to be returned or a NOT FOUND condition to occur. 
  3997.  
  3998. When set to 'OFF', the default value, deleted records are returned. 
  3999.  
  4000. If set incorrectly the default value will be used. 
  4001.  
  4002.  
  4003. ΓòÉΓòÉΓòÉ 8.5. Binary Data Control. ΓòÉΓòÉΓòÉ
  4004.  
  4005. RexxBase offers a way to store binary data in CHAR and MEMO fields.  While 
  4006. storing binary data is not in itself tricky, previous versions of RexxBase used 
  4007. null terminated strings to determine data size and length. 
  4008.  
  4009. dBase III DBT files store memo fields with two (2) end of file indicators 
  4010. hex(1a). Therefore if your binary data contains this character then the field 
  4011. will be terminated prematurely.  To avoid this situation, use the dBase IV 
  4012. format. 
  4013.  
  4014.  
  4015. ΓòÉΓòÉΓòÉ 8.5.1. REXXBASE.UseStringLengths. ΓòÉΓòÉΓòÉ
  4016.  
  4017. When RexxBase.UseStringLengths is set to "YES", the default value, then all 
  4018. CHAR and MEMO fields will be stored and retrieved with lengths based on a null 
  4019. terminating character in the data field. 
  4020.  
  4021. When set to "NO", the fields are stored and returned to you using the specific 
  4022. length as either measured by REXX or stored in the DBT file. 
  4023.  
  4024. If set incorrectly the default value will be used. 
  4025.  
  4026.  
  4027. ΓòÉΓòÉΓòÉ 9. Next Releases. ΓòÉΓòÉΓòÉ
  4028.  
  4029. The following is a list of the next planned releases. 
  4030.  
  4031.  
  4032. ΓòÉΓòÉΓòÉ 9.1. Multi-User Access. ΓòÉΓòÉΓòÉ
  4033.  
  4034. While file locking is fine for some applications a true multi-user control is 
  4035. need for a LAN system. 
  4036.  
  4037.  
  4038. ΓòÉΓòÉΓòÉ 10. Suggestions and Bugs. ΓòÉΓòÉΓòÉ
  4039.  
  4040. Please call or write to us at our address with suggestions or to report bugs. 
  4041.  
  4042. You can reach us through E-Mail by contacting Joe McVerry at 
  4043. joe@usacoder.rtp.nc.us 
  4044.  
  4045.  
  4046. ΓòÉΓòÉΓòÉ 11. Shareware Software ΓòÉΓòÉΓòÉ
  4047.  
  4048. DEFINITION OF SHAREWARE SOFTWARE 
  4049.  
  4050. Shareware Software distribution gives users a chance to try software before 
  4051. buying it.  If you try a Shareware software program and continue using it, you 
  4052. are expected to register.  Individual programs differ on details -- some 
  4053. request registration while others require it, some specify a maximum trial 
  4054. period.  With registration, you get anything from the simple right to continue 
  4055. using the software to an updated program with printed manual. 
  4056.  
  4057.  
  4058. ΓòÉΓòÉΓòÉ 11.1. Copyright ΓòÉΓòÉΓòÉ
  4059.  
  4060. Copyright laws apply to both Shareware and commercial software, and the 
  4061. copyright holder retains all rights, with a few specific exceptions as stated 
  4062. below.  Shareware software authors are accomplished programmers, just like 
  4063. commercial authors, and the programs are of comparable quality.  (In both 
  4064. cases, there are good programs and bad ones!)  The main difference is in the 
  4065. method of distribution.  The author specifically grants the right to copy and 
  4066. distribute the software, either to all and sundry or to a specific group.  For 
  4067. example, some authors require written permission before a commercial disk 
  4068. vendor may copy their Shareware software. 
  4069.  
  4070.  
  4071. ΓòÉΓòÉΓòÉ 11.2. Distribution. ΓòÉΓòÉΓòÉ
  4072.  
  4073. Shareware software is a distribution method, not a type of software.  You 
  4074. should find software that suits your needs and pocketbook, whether it's 
  4075. commercial or Shareware software.  The Shareware software system makes fitting 
  4076. your needs easier, because you can try before you buy.  And because the 
  4077. overhead is low, prices are low also.  Shareware software has the ultimate 
  4078. money-back guarantee -- if you don't use the product, you don't pay for it. 
  4079.  
  4080.  
  4081. ΓòÉΓòÉΓòÉ 12. Disclaimer ΓòÉΓòÉΓòÉ
  4082.  
  4083. DISCLAIMER - AGREEMENT 
  4084.  
  4085. Users of RexxBase must accept this disclaimer of warranty:  "REXXBASE IS 
  4086. SUPPLIED AS IS.  AMERICAN CODERS DISCLAIMS ALL WARRANTIES, EXPRESSED OR 
  4087. IMPLIED, INCLUDING, WITHOUT LIMITATION, THE WARRANTIES OF MERCHANTABILITY AND 
  4088. OF FITNESS FOR ANY PURPOSE.  AMERICAN CODERS LTD.  ASSUMES NO LIABILITY FOR 
  4089. DAMAGES, DIRECT OR CONSEQUENTIAL, WHICH MAY RESULT FROM THE USE OF REXXBASE." 
  4090.  
  4091.  
  4092. ΓòÉΓòÉΓòÉ 13. Sharing RexxBase ΓòÉΓòÉΓòÉ
  4093.  
  4094. RexxBase is a "Shareware software program" and is provided at no charge to the 
  4095. user for evaluation.  Feel free to share it with your friends, but please do 
  4096. not give it away altered or as part of another system.  The essence of 
  4097. "user-supported" software is to provide personal computer users with quality 
  4098. software without high prices, and yet to provide incentive for programmers to 
  4099. continue to develop new products.  If you find this program useful and find 
  4100. that you are using RexxBase and continue to use RexxBase after a reasonable 
  4101. trial period of 30 days, you must make a registration payment of $95.00 to 
  4102. American Coders, Ltd.  The $95.00 registration fee will license one copy for 
  4103. use on any one computer at any one time.  You must treat this software just 
  4104. like a book.  An example is that this software may be used by any number of 
  4105. people and may be freely moved from one computer location to another, so long 
  4106. as there is no possibility of it being used at one location while it's being 
  4107. used at another.  Just as a book cannot be read by two different persons at the 
  4108. same time. 
  4109.  
  4110.  
  4111. ΓòÉΓòÉΓòÉ 13.1. Commercial Users ΓòÉΓòÉΓòÉ
  4112.  
  4113. Commercial users of RexxBase must register and pay for their copies of RexxBase 
  4114. within 30 days of first use or their license is withdrawn.  Site-License 
  4115. arrangements may be made by contacting American Coders, Ltd. 
  4116.  
  4117.  
  4118. ΓòÉΓòÉΓòÉ 13.2. Distributing ΓòÉΓòÉΓòÉ
  4119.  
  4120. Anyone distributing RexxBase for any kind of remuneration must first contact 
  4121. American Coders, Ltd. at our address below for authorization.  This 
  4122. authorization will be automatically granted to distributors recognized by the 
  4123. (ASP) as adhering to its guidelines for shareware distributors, and such 
  4124. distributors may begin offering RexxBase immediately (However American Coders, 
  4125. Ltd.  must still be advised so that the distributor can be kept up-to-date with 
  4126. the latest version of RexxBase.). 
  4127.  
  4128.  
  4129. ΓòÉΓòÉΓòÉ 13.3. Pass Along ΓòÉΓòÉΓòÉ
  4130.  
  4131. You are encouraged to pass a copy of RexxBase along to your friends for 
  4132. evaluation.  Please encourage them to register their copy if they find that 
  4133. they can use it.  All registered users will receive a copy of the latest 
  4134. version of the RexxBase system.